LinuxでPIDを再利用する可能性

LinuxでPIDを再利用する可能性

LinuxオペレーティングシステムでPIDを再利用できますか?

たとえば、PID名は2252です。 PIDは無効になり、カーネルプロセステーブルから削除されます。プロセステーブルは新しいプロセスに同じPIDを再利用できますか?それとも、将来のプロセスでは使用されませんか?

ベストアンサー1

確かに。それ以外の場合、システムは起動時に32768プロセス(またはシステムの最大PID数)のみを実行できます。

プロセスが終了して待機している限り(親または子reaperによって、または親プロセスが終了した場合initによって)、そのpidは再利用できます。

スクリプトが次のことを行うことがわかります。

cmd1 & pid1=$!
something else
cmd2 & pid2=$!
more things
kill "$pid1" "$pid2"

シェル(ほとんどのシェル)言語は、子プロセスを処理するためのより良いAPIを提供しないため、これはおおよそのものです。

これらのプロセスが終了した場合、以前に開始されたプロセスが引き続き参照されるという$pid1保証はありません。また、同じかもしれません(最初にすでに死んだ場合)。その結果、誤ったプロセスが終了する可能性があります。$pid2$pid1$pid2cmd1cmd2kill

実際、これはほとんど問題ではありません。特に、pidが順次割り当てられるシステムでは、pid番号をラップするのにかなりの時間がかかるからです。ただし、pidテーブルがいっぱいになると(ゾンビプロセスがいっぱいになると)、一部の攻撃者はそれを悪用する可能性があります。

おすすめ記事