Linux: kill后台任务

我如何杀死最后一个衍生的后台任务在linux?

例子:

doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
170854 次浏览

你需要它的pid…用"ps -A"找到它。

使用killall命令:

killall taskname

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

在bash中有一个特殊的变量:

kill $!

美元!扩展为最后一个在后台执行的进程的PID。

skill doB

skill是kill命令的一个版本,它允许你根据给定的条件选择一个或多个进程。

你可以通过工号来杀人。当你把一个任务放在后台时,你会看到如下内容:

$ ./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命令的输出),当前作业总是 用+标记,上一个作业用-标记。单个%(没有附带的作业规范)也引用 目前的工作。< / p >

下面的命令为您提供会话中所有后台进程的列表,以及pid。然后您可以使用它来终止进程。

jobs -l

使用示例:

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

这会杀死所有后台进程:

jobs -p | xargs kill -9

这是一个离题的答案,但是,对于那些感兴趣的人来说,它可能是有价值的。

在@John Kugelman的回答中,%与工作规格有关。 如何有效地找到它?使用less's &pattern命令,似乎man使用less分页器(不确定),在man bash中输入&%,然后输入Enter将只显示包含'%'的行,重新显示所有,输入&然后输入。