linux:杀死后台任务

时间:2009-10-26 13:10:45

标签: linux bash unix kill job-control

如何杀死linux中最后生成的后台任务?

示例:

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

8 个答案:

答案 0 :(得分:273)

您可以按工作号码杀死。当你在后台放置一个任务时,你会看到类似的东西:

$ ./script &
[1] 35341

[1]是作业编号,可以像:

一样引用
$ kill %1
$ kill %%  # Most recent background job

要查看作业编号列表,请使用jobs命令。更多来自man bash

  

有很多方法可以引用shell中的作业。字符%引入了作业名称。工作号码n可能是          称为%n。也可以使用用于启动它的名称的前缀或使用子串来引用作业          出现在其命令行中。例如,%ce表示已停止的ce作业。如果前缀匹配多个作业,则bash          报告错误。另一方面,使用%?ce指的是在其命令行中包含字符串ce的任何作业。如果          substring匹配多个作业,bash报告错误。符号%%%+指的是当前作业的shell概念,它是在前台或在后台启动时停止的最后一个作业。以前的工作可能会          使用%-引用。在与作业有关的输出(例如,作业命令的输出)中,当前作业总是如此          标记为+,上一个作业标记为-。单个%(没有附带的工作规范)也指的是          目前的工作。

答案 1 :(得分:212)

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

kill $!

$!扩展到后台执行的最后一个进程的PID。

答案 2 :(得分:41)

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

jobs -l

使用示例:

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

答案 3 :(得分:22)

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

jobs -p | xargs kill -9

答案 4 :(得分:2)

skill doB

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

答案 5 :(得分:1)

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

答案 6 :(得分:0)

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

在@John Kugelman的回答中,%与工作规范有关。 如何有效地找到它?使用较少的&模式命令,似乎man使用较少的寻呼机(不确定),在man bash类型&%然后输入Enter将只显示包含'%&#39的行;,重新显示所有,键入&amp ;.然后输入。

答案 7 :(得分:-1)

只需使用killall命令:

killall taskname

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