プロセスが空のプロセスIDを入力しない理由

プロセスが空のプロセスIDを入力しない理由

PID番号1がシステム化(または同様のもの)になることは誰でも知っています。その後の各プロセスには別のPIDが必要です。

ただし、50個のプロセス(最大PID 50)が実行されており、PID 2を持つプロセスが終了し、新しいプロセスが開始されると、PID 2ではなくPID 51になります。なぜこれですか?

たとえば、ファイルディスクリプタの場合はそうではありませんが、ファイルディスクリプタ4を閉じて新しいファイルディスクリプタを開くと、数値4が表示されます。

答え1

ほとんどのUnixバリアントはプロセスIDを順番に割り当てます:1、2、3、4...可能な最大PID値に達すると、既存のPIDをスキップして1から始めます。

これは義務ではありません。たとえば、OpenBSD は順次ではなくランダムに PID を割り当てます。これはFreeBSDでもオプションです。しかし、セキュリティを強化することが目標です。その利点は疑わしいです。

この動作には(あいまいな)利点があります。つまり、プロセスが終了した後にプロセスIDがすぐに再利用されることはほとんどありません。プロセスを監視し、プロセスが終了した後にPIDが使用されなくなると仮定する多くのプログラムがあります。 PID が新しいプロセスで使用されると中断されます。これらのプログラムには言い訳があります。親プロセス以外のプロセスを監視するための良いAPIはありません。ただし、これらのプログラムはあまりにも一般的であるため、OpenBSDはプロセスが終了した後の一定期間(私の記憶が正しい場合は数分)、PIDの再利用を防ぎます。

この動作の主な理由は、これが従来のUnixシステムで行われた方法であり、それを変更する強力な理由がなかったためです。ファイル記述子の場合、Unixは歴史的に最初の使用可能なfd番号を使用しており、この動作は正式な標準になっているため、すべてのUnix / POSIXシステムでこれを行う必要があります。

関連情報