1

親プロセスを子にfork()すると、fork()によって返されたPIDが親のメモリに格納され、時間が経過して子が終了します。ここで、親のメモリに格納されているPID値がまだ同じフォークされた子を参照しているかどうかを判断できますか?また、このPIDが同じPIDを持つ別のプロセスを参照していないことを確認するにはどうすればよいですか?終了しましたか?

4

2 に答える 2

3

オペレーティングシステムは、子が実行を停止したことを親が認識するまで、子のPIDを再利用できません。

親はとを使用して確認応答をwait行いwaitpidます。親がこれらの関数を呼び出さない間、終了する子は「ゾンビ」状態に保たれます。これらの呼び出しが戻った後、親は、子が持っていたのと同じPIDで実行されているプロセスがある場合、それは子ではないことを認識します。

安全性を高めるために、子プロセスの親PIDを確認することをお勧めします。

于 2012-10-18T07:26:32.897 に答える
1

あなたはできる:

  • man 2 wait子供が亡くなったときに通知を受け取るために、親に電話します。
  • 親と子の間でポーリングプロトコルを考案します。子がまだ同じである場合は、スポーン直後と同じ値で親のポーリングに応答する必要があります。これには、POSIXIPCメカニズムを使用できます。これは、親に実行スレッドが1つしかなく、親でスレッドを使用できない場合に役立ちます。
于 2012-10-18T07:22:06.747 に答える