Linux C プログラムでプロセスを生成し、親プロセスと子プロセスの合計 2 つのプロセスがあるとします。私が欲しいのは、これら2つのプロセスの1つが終了すると、他のプロセスも終了することです。
これを達成する方法は?類似のソースコードはありますか?
注: 両方のプロセスをブロックしたくありません。たとえば、親プロセスを wait() によってブロックしたくありません。
ありがとう!
Linux C プログラムでプロセスを生成し、親プロセスと子プロセスの合計 2 つのプロセスがあるとします。私が欲しいのは、これら2つのプロセスの1つが終了すると、他のプロセスも終了することです。
これを達成する方法は?類似のソースコードはありますか?
注: 両方のプロセスをブロックしたくありません。たとえば、親プロセスを wait() によってブロックしたくありません。
ありがとう!
waitpid
親プロセスでは、システムコールを使用できます。子が終了するまでブロックします。
子プロセスでは使用できませんwaitpid
。SIGTERM
選択肢の 1 つは、父親が退場時に子供に通知することです。しかし、これは、父親が を使用して殺されない場合にのみ機能しSIGKILL
ます。kill
with paramを使用して親プロセスにシグナルを定期的に送信することをお勧めし0
ます。これが失敗した場合、プロセスは終了しています。
sig が 0 の場合、シグナルは送信されませんが、エラー チェックは実行されます。これは、プロセス ID またはプロセス グループ ID の存在を確認するために使用できます。
子が終了すると、親にはSIGCHLD
. 親が死ぬ場合は、何らかの方法で子供に通知するか、少なくともSIGTERM
.
http://linux.die.net/man/2/waitpid
子プロセスを待ってから、waitpid から戻るときに終了します。
親プロセスが終了すると、子プロセスはゾンビ プロセスになります。
子プロセスが終了すると、wait システム コールによって親プロセスに通知できます。親のステータスを読み取ることで、親を終了できます。