linux:杀死后台任务
-
06-07-2019 - |
题
如何杀死linux中最后生成的后台任务?
示例:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
解决方案
在bash中有一个特殊的变量:
kill $!
$!扩展到后台执行的最后一个进程的PID。
其他提示
您可以按工作号码杀死。当你在后台放置一个任务时,你会看到类似的东西:
$ ./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概念,它是在前台或后台启动时停止的最后一个作业。以前的工作可能会 使用% -
引用。在与作业有关的输出(例如,作业命令的输出)中,当前作业总是如此 标记为+
,上一个作业标记为-
。单个%
(没有附带的作业规范)也引用了 目前的工作。
以下命令为您提供会话中所有后台进程的列表以及pid。然后,您可以使用它来终止该过程。
jobs -l
使用示例:
$ sleep 300 &
$ jobs -l
[1]+ 31139 Running sleep 300 &
$ kill 31139
这应该会杀死所有后台进程:
jobs -p | xargs kill -9
skill doB
skill
是kill命令的一个版本,它允许您根据给定条件选择一个或多个进程。
你需要它的pid ...使用“ps -A”找到它。
这是一个不为人知的答案,但是,对于那些感兴趣的人来说,它可能很有价值。
在@John Kugelman的回答中,%与工作规范有关。 如何有效地找到它?使用less& pattern命令,似乎man使用较少的寻呼机(不确定),在man bash类型&%然后输入Enter将只显示包含'%'的行,以重新显示所有,键入&amp ;.然后输入。
只需使用killall命令:
killall taskname
如需更多信息和更多高级选项,请输入“man killall”。