Linux가 새로 생성된 프로세스에 특정 PID 번호를 사용하는 것을 방지하는 방법은 무엇입니까?

Linux가 새로 생성된 프로세스에 특정 PID 번호를 사용하는 것을 방지하는 방법은 무엇입니까?

처음에 설명한 문제에 대한 해결책을 제시하고 싶습니다.여기:

pkill원자적 작업이 아닙니다. 멀리 떨어져 있습니다. pkill -P 666 foo는 pid 667이 foo라는 666의 하위임을 확인하므로(Linux에서는 /proc fs에서 여러 파일을 열고 읽어 이 작업을 수행합니다) 실제로 시스템에서 kill(2)을 호출할 때까지 호출되면 프로세스가 종료되었을 수 있으며 해당 pid가 재사용되었을 수 있습니다.

작업을 안전하게 만들기 위해 pkill -P XXX(SQL의 트랜잭션과 같은) 구현하고 싶습니다.2단계 커밋 프로토콜:

  • 프로세스가 THE_PARENT프로세스의 하위인지 확인합니다.
  • "yes"인 경우 하위 프로세스의 PID를 "DO_NOT_REUSE"로 표시합니다.
  • 프로세스가 여전히 프로세스의 하위인지 확인합니다 THE_PARENT.
  • "yes"인 경우 하위 프로세스를 종료합니다(여전히 가능하다면).
  • DO_NOT_USE이 PID 번호의 플래그를 삭제합니다 .

이 목적으로 PID 번호를 "사용할 수 없음"으로 표시할 수 있습니까?

답변1

커널은 "랩어라운드"될 때까지 pid를 재사용하지 않습니다.

cat /proc/sys/kernel/pid_max4194304( 내 시스템에서) 을 사용하여 pid_max를 확인할 수 있습니다 .

따라서 프로세스 종료 중에 PID가 재사용될 가능성은 거의 없습니다.

   /proc/sys/kernel/pid_max (since Linux 2.5.34)
       This file specifies the value at which PIDs wrap around (i.e.,
       the value in this file is one greater than the maximum PID).
       PIDs greater than this value are not allocated; thus, the
       value in this file also acts as a system-wide limit on the
       total number of processes and threads.  The default value for
       this file, 32768, results in the same range of PIDs as on ear‐
       lier kernels.  On 32-bit platforms, 32768 is the maximum value
       for pid_max.  On 64-bit systems, pid_max can be set to any
       value up to 2^22 (PID_MAX_LIMIT, approximately 4 million).

관련 정보