特定の親プロセスで実行されているすべての子プロセスを終了できる必要があります。これを行うためのより良いオプションは何ですか? PPIDまたはPGIDを使用しますか?
このような:
pkill -term-P
PPIDを使用すると子供が死にます。しかし、PGIDに関するいくつかの内容を読んで、どちらが他のものよりも効果的かを知りたいです。
答え1
親プロセスを終了しても、親プロセスが信号を捕捉して再送信しない限り、子プロセスは終了しません。
TERMでプロセスグループを終了すると、プロセスグループのすべてのメンバーにTERMシグナルが送信されるため、これは行きますが、親プロセスがプロセスグループを開始したか(または親プロセスの親がプロセスグループを開始したかどうかを確認する必要があります)。 )親の親が生きている場合、TERM信号を受信できるかどうかは関係ありません。
シェルを使用して親プロセス(または親プロセスの親プロセス)を開始する場合は、シェルの各コマンド呼び出しがプロセスグループを開始するため、これを心配する必要はありません。
(親プロセスが終了すると、カーネルが子プロセスにシグナルを送信するように指示するために使用できるLinux関連の機能がありますが、私が知っている限り、標準のUnixではこれは発生しません。)prctl(2)もっと知りたい場合は、DEATHSIGを検索してください。