~からhttps://unix.stackexchange.com/a/43709/674
以下で
kill
管理するすべてのバックグラウンドジョブの場合bash
kill $(jobs -p)
kill $(jobs -p)
現在シェルで「実行中」のバックグラウンドジョブのみを終了し、「停止」されているか、シェルで他のジョブを終了しませんか?
現在、シェルで実行しているか停止しているか、他の方法ですべてのバックグラウンドタスクをどのように終了しますか?
たとえば、次のようにしてless
2つの停止ジョブを作成しましたctrl+z
。
$ ps | less
[1]+ Stopped ps | less
$ less recover_jobs.sh
[2]+ Stopped less recover_jobs.sh
$ jobs -l
[1]- 2753 Done ps
2754 Stopped | less
[2]+ 2842 Stopped less recover_jobs.sh
$ jobs -p
2753
2842
$ kill $(jobs -p)
bash: kill: (2753) - No such process
$ kill 2754
$ kill 2842
$ jobs -l
[1]- 2753 Done ps
2754 Stopped | less
[2]+ 2842 Stopped less recover_jobs.sh
$ fg 1
ps | less
Terminated
$ fg 2
less recover_jobs.sh
Terminated
理由を知りたいです。
kill $(jobs -p)
stopped
どんな仕事も殺さないでしょう。jobs -p
停止したジョブのpid 2754を表示するのではなく、| less
完了したジョブのpid 2753を表示しますps
。kill 2754
kill 2842
終了せずに動作| less
を停止しましたless recover_jobs.sh
。- タスクを中断すると
fg
すぐに表示されますが、Terminated
私の前には表示されませんかfg
?
ありがとうございます。
ベストアンサー1
kill $( jobs -p )
TERM
みんなに信号を送るよ働く、実行するかどうかにかかわらず。ジョブには複数のプロセスを含めることができますが、各ジョブの最初のプロセスだけがシグナルを受け取ります(下記参照)。
最初、3番目、最後の質問に対する答えは同じです。停止した操作は実行されません。受け取るどんな信号でも。シグナルハンドラ(基本ハンドラを含む)はプロセスで実行され、プロセスは次のとおりです。停止。信号は出版するジョブが再開したら。
2番目の質問は、jobs -p
プロセスのプロセスIDのみを提供すると思います。最初jobs -l
すべてのジョブに属するすべてのプロセスが一覧表示されている間、パイプライン内のプロセスが一覧表示されます。パイプを終了する最初のプロセスは、次のプロセスが読み取っているファイル記述子を閉じるので、次に読み取ろうとしたときにファイルの終わりを通知します。