Linuxで最後に生成されたバックグラウンドタスクを強制終了するにはどうすればよいですか?
例:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
Linuxで最後に生成されたバックグラウンドタスクを強制終了するにはどうすればよいですか?
例:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
ジョブ番号で殺すことができます。タスクをバックグラウンドにすると、次のように表示されます。
$ ./script &
[1] 35341
これ[1]
はジョブ番号であり、次のように参照できます。
$ kill %1
$ kill %% # Most recent background job
ジョブ番号のリストを表示するには、jobs
コマンドを使用します。よりman bash
:
シェルでジョブを参照するには、いくつかの方法があります。キャラクター
%
がジョブ名を紹介します。ジョブ番号n
は と呼ばれることがあります%n
。ジョブは、ジョブを開始するために使用される名前の接頭辞、またはコマンド ラインに表示される部分文字列を使用して参照することもできます。たとえば、停止したジョブ%ce
を指します。ce
プレフィックスが複数のジョブに一致する場合、bash はエラーを報告します。%?ce
一方、usingはce
、コマンド ラインに文字列を含むすべてのジョブを指します。部分文字列が複数のジョブに一致する場合、bash はエラーを報告します。シンボル%%
と%+
現在のジョブのシェルの概念を参照してください。これは、フォアグラウンドにある間に停止した最後のジョブ、またはバックグラウンドで開始した最後のジョブです。前のジョブは、 を使用して参照できます%-
。ジョブに関する出力 (たとえば、jobs コマンドの出力) では、現在のジョブには常にフラグが付けられ+
、前のジョブには-
. 単一%
(付随するジョブ指定なし) も現在のジョブを参照します。
bash には、このための特別な変数があります。
kill $!
$! バックグラウンドで実行された最後のプロセスの PID に展開されます。
次のコマンドは、pid とともに、セッション内のすべてのバックグラウンド プロセスのリストを表示します。その後、それを使用してプロセスを強制終了できます。
jobs -l
使用例:
$ sleep 300 &
$ jobs -l
[1]+ 31139 Running sleep 300 &
$ kill 31139
skill doB
skill
特定の基準に基づいて 1 つまたは複数のプロセスを選択できる kill コマンドのバージョンです。
これはトピック外の回答ですが、興味のある人にとっては価値があるかもしれません。
@John Kugelman の回答のように、 % はジョブ仕様に関連しています。 それを効率的に見つける方法は?less の &pattern コマンドを使用します。man は less ページャーを使用しているようです (よくわかりません)。man bash で &% と入力して Enter を入力すると、「%」を含む行のみが表示され、すべてを再表示するには & と入力します。入力します。
そのpidが必要です...「ps -A」を使用して見つけてください。
killall コマンドを使用するだけです。
killall タスク名
詳細と高度なオプションについては、「man killall」と入力してください。