作成された一連のプロセスがある場合、ややばかげた質問があります...これらは必ずしも何らかの継承であるとは限りません。プロセスのpidは、連続した数値またはランダムなpidである必要がありますか?
7 に答える
これは、オペレーティング システムによって決定されます。
一般に、これらは通常、OS によって順番に割り当てられます。ただし、ほとんどのオペレーティング システムの仕様では、プロセス ID の割り当ては決定論的ではない (つまり、ランダムである可能性があり、将来のバージョンで変更される可能性があるなど) ため、この動作は決定の基礎となるものではありません。
Linux では、pid は通常、システム全体で順番に割り当てられますが、定期的に循環し、他の無関係なプロセスによって「ギャップ」が生じる場合があります。極端なケースでは、このラップアラウンドを引き起こすのに十分な幅の「ギャップ」がある可能性があります。したがって、特定の順序を想定しないでください。代わりに、親プロセスまたは子プロセスの PID を明示的に追跡してください。
システムの機能をテストする方法は次のとおりです。
for i in $(seq 20); do ps; done | grep ps
「ps」コマンドのPIDは連続したプロセスであるか、他の呼び出し元がスポーンできると合理的に期待できる限り連続したプロセスです。
Windows上の私のcygwinターミナルは、それらをランダムに割り当てます。私のWebホストは、それらを順番に割り当てます(おそらく、他のユーザーまたはサーバーによって実行されるプロセスのためのギャップがあります)。
マルチユーザーシステムのユーザー間で情報が漏洩する可能性があるため、シーケンシャルPID割り当てはセキュリティ上の懸念事項であると考える人もいます。
AIXでは、多くの場合、より大きな(たとえば、7桁の)PIDが表示され、必ずしも半順次に割り当てられるとは限りません(ただし、テストしたところ、2ずつ増加して循環しているように見えました。マシンに別のユーザーがいたため、あまり意味がありません)。
AIX 5.3マシンでの新規ログイン:
$ ps
PID TTY TIME CMD
1060910 pts/27 0:00 -ksh
1155224 pts/27 0:00 ps
$
プラットフォームによって異なりますが、pid の特定の順序に依存するべきではありません。
Windows では、pid は通常増加する数で割り当てられますが、プロセスが終了すると、pid は再利用される可能性があり、新しいプロセスの pid が古いプロセスよりも低い場合が見られます。また、pid は tid と同じ名前空間から生成されるため、新しいプロセスを起動しても pid が 4 ずつ増加することはありません。
あなたの観点からは、それらはランダムになります。システムはこれらの番号を管理し、プロセスが作成されると割り当てます。現在私のシステムにある PID をざっと見てみると、それらはすべて 4 で割り切れます...
それらの子を作成している場合、pid を知っているでしょう。pid は OS スケジューラに依存します。このようなことは気にしません。