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信号を送信します。
最新のバックグラウンドプロセスを終了したい場合はそれがすべてです$!
。