GNU/Linux >> Linux の 問題 >  >> Linux

Linuxで親プロセスが強制終了された後、子プロセスがまだ生きているのはなぜですか?

いいえ、プロセスを単独で強制終了しても、子プロセスは強制終了されません。

プロセス グループにシグナルを送信する必要があります 特定のグループのすべてのプロセスにシグナルを受信させたい場合

たとえば、親プロセス ID のコードが 1234 の場合、parentpid にマイナス記号を追加してから親プロセス ID を指定する必要があります。

kill -9 -1234

そうしないと、孤児は init にリンクされます 、3 番目のスクリーンショットに示されているように (子供の PPID は 1 になっています)。


<ブロック引用>

-bash:kill:(-123) - そのようなプロセスはありません

インタラクティブな Terminal.app セッションでは、ジョブ制御/監視モードが有効になっている場合、フォアグラウンド プロセス グループの ID 番号とバックグラウンド プロセス グループの ID 番号は設計上異なります。つまり、ジョブ制御が有効な Terminal.app セッションでコマンドをバックグラウンドで実行すると、$! バックグラウンド プロセスの pid は、実際には新しいプロセス グループ ID 番号 (pgid) です。

ただし、ジョブ制御が有効になっていないスクリプトでは、そうではない場合があります。バックグラウンド プロセスの pid は、新しい pgid ではなく、通常の pid である可能性があります。そして、これがエラーメッセージ -bash: kill: (-123) - No such process の原因です 、プロセスグループを強制終了しようとしていますが、kill に (pgid ではなく) 通常の pid のみを指定しています コマンド。

# the following code works in Terminal.app because $! == $pgid
{
sleep 100 &
IFS=" " read -r pgid <<EOF
$(ps -p $! -o pgid=)
EOF
echo $$ $! $pgid
sleep 10
kill -HUP -- -$!
#kill -HUP --  -${pgid}  # use in script
}

Linux
  1. Sigintが親プロセスに送信されたときに子プロセスに伝播されないのはなぜですか?

  2. Linux プロセスのライフ サイクルのしくみ – 親プロセス、子プロセス、および初期化プロセス

  3. Linux での kill コマンドの例

  1. 親が終了した後に子プロセスを終了させる方法は?

  2. Linux OOM killer によって強制終了されたプロセスを見つける

  3. Bashで特定のタイムアウト後に子プロセスを強制終了する方法は?

  1. Linuxでゾンビプロセスを強制終了する方法

  2. Linux – -9プロセスを強制終了すべきではないのはいつですか?

  3. Linux でこのプロセスを強制終了できないのはなぜですか?