如何杀死linux中最后生成的后台任务?
示例:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
答案 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”。