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