Kill-9バックグラウンドタスクもbashを殺します。

Kill-9バックグラウンドタスクもbashを殺します。
sleep 1 & kill -9 $?

上記の内容は殺されます(ほとんど)強く打つシェルまたは現在の端末ウィンドウ。

なぜそんなことですか?


注:sleep 1 & kill $?シェル/ターミナルを終了しません。

私が思っていたものと違うことをしないで競合状態などがあるかどうかを確認するには、次のような効果があります.

/bin/sleep 2 & pid=$?; sleep 1; kill -9 $pid

GNU bash、バージョン5.0.3(1) - リリース

ベストアンサー1

$?最後のコマンドの終了状態です。バックグラウンドコマンドの開始は常に成功するため、… & do_something_with $?値は$?0です。あなたは走っていますkill -9 0

渡されたPIDは、kill基本システムコールに渡されます。 ShellマニュアルにはPID以外のものになる可能性があると文書化されていませんが、システムコールマニュアルは。 PIDが0の場合、現在のプロセスのすべてのプロセスを意味します。プロセスグループ。 (-1はPID 1を除くすべてのプロセスを意味し、もう1つの負の値は指定されたプロセスグループ内のすべてのプロセスを意味します)場合を除く)。これはバックグラウンドジョブではありません)次kill -9 0のとおりですkill -9 $$。シェルプロセスを終了します。

すべてのバックグラウンドプロセス(sleepコマンドなど)は引き続き実行されます。シグナルを受け取らず、シェルはシグナルを送信する機会さえも得られません。端末が死んでも、通常端末には影響しません。ただし、一部のプログラムは閉じた端末に書き込もうとするとエラーが発生する可能性があります(もちろんsleep動作しません)。

kill 0シェルから無視される TERM 信号を送信します。kill -9 0無視できないKILL信号を送信します。


最新のバックグラウンドプロセスを終了したい場合はそれがすべてです$!

おすすめ記事