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).

おすすめ記事