Programing

Linux PID 재활용

crosscheck 2020. 11. 22. 19:02
반응형

Linux PID 재활용


사용 된 PID의 재활용에 관한 Linux 정책이 있습니까? 내 말은, PId가 사용 되었다면 얼마나 나중에 다시 사용 될까요?


새로운 프로세스가 시작됨에 따라 PID는 시스템에 따른 한계까지 증가한 다음 래핑됩니다. 커널은이 랩 어라운드가 발생하기 전에 PID를 재사용하지 않습니다.

제한 (최대 pid 수)은 /proc/sys/kernel/pid_max입니다. 매뉴얼 은 다음과 같이 말합니다.

/proc/sys/kernel/pid_max (Linux 2.5.34부터)

이 파일은 PID가 래핑 되는 값을 지정합니다 (즉,이 파일의 값이 최대 PID보다 하나 더 큼). 이 파일의 기본값 인 32768은 이전 커널에서와 동일한 범위의 PID를 생성합니다.


https://superuser.com/questions/135007/how-are-pids-generated

이것은 귀하의 질문에 답할 것입니다-PID가 다 떨어지면 여전히 할당 된 것을 건너 뛰고 PID를 재활용하는 것처럼 보입니다.


서비스 관리자가 PID 재사용 문제를 처리하는 데 도움이되는 새로운 기능pidfd

Unix 시스템에서 PID 재사용 문제를 해결하려면

Linux 5.1 은 프로세스 가 PID 재사용 후에도 안정적인 핸들에 신호를 보낼 수 있도록 하는를 추가 했습니다 .pidfd_send_signal(2)pidfd

리눅스 5.2 에 추가CLONE_PIDFDclone(2)사용자와 함께 사용할 수 있었다의 PID를 만들 수 있도록하는 pidfd_send_signal(2). 그러나를 포함 fork()하거나 포함 clone()하지 않는 많은 프로세스가 생성되어 CLONE_PIDFDAndroid의 LMK ( Low Memory Killer ) 또는 systemd 와 같은 서비스 관리자에 문제를 일으킬 수 있습니다 .

Linux 5.3pidfd_open(2) 은 PID 재사용 문제를 처리하는 데 필요한 기능을 완성하기 위해 syscall을 추가했습니다 . 호출자는 CLONE_PIDFD clone(2)플래그를 사용하여 생성되지 않은 프로세스에 대해 폴링 가능한 pidfd를 검색 할 수 있습니다 .

또한 Linux 5.3 릴리스에는 pidfds. 이를 통해 프로세스 관리자는 (부모가 아닌) 프로세스가 레이스없는 방식으로 종료되는시기를 알 수 있습니다. 사용되는 알림 메커니즘은 작업의 부모가 자녀의 사망을 알릴 때 현재 사용되는 것과 동일한 논리를 따릅니다. 이 패치 셋을 사용하면 pidfds{e} poll 루프에 넣고 프로세스 (예 : 스레드 그룹) 종료에 대한 신뢰할 수있는 알림을받을 수 있습니다.

권장 LWN 문서 : 새 시스템 호출 : pidfd_open () 및 close_range ()

참고 URL : https://stackoverflow.com/questions/11323410/linux-pid-recycling

반응형