カーネル2.6から始まるとします。
私はシステムで実行されているすべてのプロセスを観察します。
子のPIDは常に親のPIDよりも大きいですか?
「反転」が可能な特別な状況はありますか?
ベストアンサー1
いいえ、PIDが最大数値を持つことができるという単純な理由による。プロセスのPIDが最も高い場合、そのプロセスが分岐する子プロセスはより大きなPIDを持つことができません。サブアイテムに低いPIDを提供するのではなく、完全に失敗する方法がありますがfork()
、これはあまり生産的ではありません。
PIDは順番に割り当てられ、最も高いPIDが使用された後、システムは低いPIDを再利用(アイドル)し、他の状況でも子プロセスのためのより低いPIDを得ることができます。
私のシステムのデフォルトの最大PID()/proc/sys/kernel/pid_max
は32768なので、ラップアラウンドが発生する条件を達成することは難しくありません。
$ echo $$
27468
$ bash -c 'echo $$'
1296
$ bash -c 'echo $$'
1297
システムがPIDをランダムに割り当てる場合(OpenBSDのように)連続(Linuxなど)の代わりに2つのオプションがあります。可能なすべてのPID空間からランダムに選択します。この場合、子プロセスの PID が親プロセスの PID より低い場合があります。あるいは、子プロセスのPIDは、上位PIDより大きい値からランダムに選択され、平均して上位PIDと最大値との間に配置される。再帰的なフォークプロセスはすぐに最大値に達し、上記のものと同じポイントに達します。新しいフォークが成功するには、より低いPIDを使用する必要があります。