Linux:バックグラウンドタスクの強制終了
-
06-07-2019 - |
質問
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
を含むジョブが参照されます。もし substringは複数のジョブに一致し、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タイプ&%の場合、man use less pager(確実ではありません)のように入力すると、「%」を含む行のみが表示され、すべてを再表示するには、&と入力します。 Enterキーを押します。
killallコマンドを使用するだけです:
killallタスク名
詳細情報と詳細オプションについては、「man killall」と入力してください。