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

有多种方法可以在 shell 中引用作业。角色%介绍了一个工作名称。作业编号n可称为%n。也可以使用用于启动它的名称的前缀或使用出现在其命令行中的子字符串来引用作业。例如,%ce指的是已停止的ce作业。如果前缀匹配多个作业,bash 会报告错误。%?ce另一方面,使用是指ce在其命令行中包含该字符串的任何作业。如果子字符串匹配多个作业,bash 会报告错误。符号%%%+参考 shell 对当前作业的概念,即最后一个在前台停止或在后台启动的作业。可以使用 引用以前的作业%-。在与作业有关的输出中(例如,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 回答
26

这应该杀死所有后台进程:

jobs -p | xargs kill -9
于 2014-01-05T04:58:11.107 回答
2
skill doB

skill是 kill 命令的一个版本,可让您根据给定的条件选择一个或多个进程。

于 2009-10-26T13:17:29.033 回答
0

你需要它的 pid... 使用“ps -A”来找到它。

于 2009-10-26T13:12:55.960 回答
0

这是一个无关紧要的答案,但是,对于那些感兴趣的人来说,它可能很有价值。

正如@John Kugelman 的回答一样, % 与工作规范有关。 如何有效地找到它?使用 less 的 &pattern 命令,似乎 man 使用 less 寻呼机(不太确定),在 man bash 中输入 &% 然后输入 Enter 将只显示包含 '%' 的行,要重新显示全部,输入 &。然后输入。

于 2016-06-10T02:24:58.980 回答
-3

只需使用 killall 命令:

killall 任务名

如需更多信息和更高级的选项,请键入“man killall”。

于 2009-10-26T13:14:28.983 回答