web-dev-qa-db-ja.com

Linux:バックグラウンドタスクの強制終了

Linuxで最後に生成されたバックグラウンドタスクを強制終了するにはどうすればよいですか?

例:

doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
177
flybywire

これにはbashに特別な変数があります:

kill $!

$!バックグラウンドで実行された最後のプロセスのPIDに展開します。

212
falstro

ジョブ番号で殺すことができます。バックグラウンドでタスクを配置すると、次のように表示されます。

$ ./script &
[1] 35341

[1]はジョブ番号であり、次のように参照できます。

$ kill %1
$ kill %%  # Most recent background job

ジョブ番号のリストを表示するには、jobsコマンドを使用します。 man bashからの詳細:

シェルでジョブを参照する方法はいくつかあります。文字%はジョブ名を紹介します。ジョブ番号nは、%nと呼ばれる場合があります。ジョブは、開始に使用された名前のプレフィックスを使用するか、コマンドラインに表示されるサブストリングを使用して参照される場合もあります。たとえば、%ceは、停止したceジョブを指します。プレフィックスが複数のジョブに一致する場合、bashはエラーを報告します。一方、%?ceを使用すると、コマンドラインに文字列ceを含むジョブが参照されます。サブストリングが複数のジョブに一致する場合、bashはエラーを報告します。シンボル%%および%+は、シェルの現在のジョブの概念を参照します。これは、フォアグラウンドまたはバックグラウンドで開始されている間に停止した最後のジョブです。前のジョブは、%-を使用して参照できます。ジョブに関する出力(jobsコマンドの出力など)では、現在のジョブには常に+のフラグが付けられ、前のジョブには-のフラグが常に付けられます。単一の%(付随するジョブ仕様なし)も現在のジョブを参照します。

274
John Kugelman

次のコマンドは、セッション内のすべてのバックグラウンドプロセスのリストとpidを提供します。その後、それを使用してプロセスを強制終了できます。

jobs -l

使用例:

$ sleep 300 &
$ jobs -l
[1]+ 31139 Running                 sleep 300 &
$ kill 31139
41
Dave Vogt

これにより、すべてのバックグラウンドプロセスが強制終了されます。

jobs -p | xargs kill -9
22
Prabhu Are
skill doB

skillは、指定された基準に基づいて1つまたは複数のプロセスを選択できるkillコマンドのバージョンです。

2
gte525u

Pidが必要です...「ps -A」を使用して検索します。

1
jldupont

これは話題外の答えですが、興味のある人にとっては価値があるかもしれません。

@John Kugelmanの答えのように、%はジョブの仕様に関連しています。 それを効率的に見つける方法?lessの&patternコマンドを使用、man bashタイプ&%で、より少ないページャーを使用しているようです(確かではありません)。すべて、タイプ&。 Enter.

0
qeatzy