質問

作成された一連のプロセスがある場合、私はやや愚かな質問をしています...これらは必ずしも何らかの種類の継承ではなく、プロセスのpidは数字の連続またはランダムなpidでなければなりませんか?

役に立ちましたか?

解決

これはオペレーティングシステムによって決定されます。

通常、これらは通常、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スケジューラに依存します。このことは気にしません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top