203

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

例:

doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
4

8 に答える 8

296

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

$ ./script &
[1] 35341

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

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

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

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

于 2009-10-26T13:18:11.683 に答える
245

bash には、このための特別な変数があります。

kill $!

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

于 2009-10-26T13:14:39.530 に答える
46

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

jobs -l

使用例:

$ sleep 300 &
$ jobs -l
[1]+ 31139 Running                 sleep 300 &
$ kill 31139
于 2009-10-26T13:18:59.547 に答える
2
skill doB

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

于 2009-10-26T13:17:29.033 に答える
0

これはトピック外の回答ですが、興味のある人にとっては価値があるかもしれません。

@John Kugelman の回答のように、 % はジョブ仕様に関連しています。 それを効率的に見つける方法は?less の &pattern コマンドを使用します。man は less ページャーを使用しているようです (よくわかりません)。man bash で &% と入力して Enter を入力すると、「%」を含む行のみが表示され、すべてを再表示するには & と入力します。入力します。

于 2016-06-10T02:24:58.980 に答える
0

そのpidが必要です...「ps -A」を使用して見つけてください。

于 2009-10-26T13:12:55.960 に答える
-3

killall コマンドを使用するだけです。

killall タスク名

詳細と高度なオプションについては、「man killall」と入力してください。

于 2009-10-26T13:14:28.983 に答える