Linuxで最後に生成されたバックグラウンドタスクを終了するにはどうすればよいですか?
例:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
Linuxで最後に生成されたバックグラウンドタスクを終了するにはどうすればよいですか?
例:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
回答:
このための特別な変数がbashにあります:
kill $!
$!バックグラウンドで実行された最後のプロセスのPIDに展開されます。
^Z
バックグラウンドジョブではなく、ジョブを停止します。後続bg
は実際の「バックグラウンド」を実行し(バックグラウンドで実行を再開)、その後は$!
期待どおりに機能します。
????
killの後に実行される1つ以上のコマンドを表すと仮定して、これらのコマンドのいずれかがバックグラウンドプロセスによって行われた作業に依存している場合、バックグラウンドプロセスが後にシグナルハンドラーで実行する可能性があるクリーンアップまたは仕上げタスクに注意してください(トラップ可能な)信号を受信します。そのような「依存」コマンドの最初の直前にwait
(おそらくa sync
またはaも続く)を追加するのが最善sleep <n>
です。
ジョブ番号で殺すことができます。タスクをバックグラウンドで実行すると、次のようになります。
$ ./script &
[1] 35341
これ[1]
はジョブ番号であり、次のように参照できます。
$ kill %1
$ kill %% # Most recent background job
ジョブ番号のリストを表示するには、jobs
コマンドを使用します。他の投稿者man bash
:
シェルでジョブを参照するには、いくつかの方法があります。キャラクター
%
はジョブ名を紹介します。ジョブ番号n
はと呼ばれることがあります%n
。ジョブは、その開始に使用された名前のプレフィックスを使用して、またはそのコマンドラインに表示される部分文字列を使用して参照される場合もあります。たとえば%ce
、停止したce
ジョブを指します。プレフィックスが複数のジョブに一致する場合、bashはエラーを報告します。%?ce
一方、を使用すると、ce
コマンドラインに文字列を含むジョブを参照できます。サブストリングが複数のジョブに一致する場合、bashはエラーを報告します。シンボル%%
と%+
現在のジョブに関するシェルの概念を参照してください。これは、フォアグラウンドにあるか、バックグラウンドで開始されている間に停止された最後のジョブです。以前のジョブは、を使用して参照できます%-
。ジョブに関連する出力(たとえば、jobsコマンドの出力)では、現在のジョブには常にのフラグが付けられ+
、前のジョブにはのフラグが付けられ-
ます。単一%
(付随するジョブ指定なし)も現在のジョブを参照します。
set -m
)でオンにできると思いますが、インタラクティブな使用を目的としています。stackoverflow.com/questions/690266/…もご覧ください
%1
と%%
-特に。Ctrl-Cでは死ぬものがないので、Ctrl-Zを押してからkill -9 %%
。私が便利だと思った1つの例は次のとおりですwhile true; do mplayer <some unstable online radio>; date >> restarts.log; done
。前に私がしなければならなかったps
かもしれないかjobs -l
、そして退屈であるPIDを、再入力します。
while true
、に置き換えたい場合がありますwhile sleep 1
。これにより、再起動する前に少し遅れてそれを受け入れることができます。ctrl-cを2回押すと、2番目はスリープを中断し、ゼロ以外の終了で終了してループを抜けます。
killallコマンドを使用するだけです。
killallタスク名
詳細と詳細オプションを表示するには、「man killall」と入力してください。
killall python
または必要がある場合は、あまり役に立ちませんkillall java
。