unix Linux:取消后台任务

31moq8wy  于 2023-03-12  发布在  Unix
关注(0)|答案(8)|浏览(171)

如何在Linux中终止最后生成的后台任务?
示例:

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

du7egjpx1#

你可以通过工号来杀人。当你把一个任务放到后台时,你会看到类似这样的东西:

$ ./script &
[1] 35341

[1]是工单号,可以引用如下:

$ kill %1
$ kill %%  # Most recent background job

要查看作业编号列表,请使用jobs命令。man bash提供的更多信息:
在shell中引用作业的方法有多种。字符%引入作业名。作业号n可以称为%n。还可以使用用于启动作业的名称前缀或使用出现在其命令行中的子字符串来引用作业。例如,%ce是指已停止的ce作业。如果前缀与多个作业匹配,则bash会报告错误。另一方面,使用%?ce是指在其命令行中包含字符串ce的任何作业。如果子字符串与多个作业匹配,bash报告一个错误。符号%%%+表示shell对当前作业的概念,当前作业是最后一个在前台停止或在后台启动的作业。可以使用%-引用上一个作业。在与作业有关的输出中(例如,作业命令的输出),则当前作业始终标记为+,前一作业标记为-。单个%(没有附带的作业规范)也引用当前作业。

0md85ypi

0md85ypi2#

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

kill $!

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

ncgqoxb0

ncgqoxb03#

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

jobs -l

示例用法:

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

fykwrbwg4#

这将终止所有后台进程:

jobs -p | xargs kill -9
igetnqfo

igetnqfo5#

skill doB

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

vawmfj5a

vawmfj5a6#

您需要它的pid...使用“ps-A”查找它。

9bfwbjaz

9bfwbjaz7#

正如John Kugelman的回答,%与作业规范有关。

如何有效地找到它?使用less的&pattern命令man似乎使用了 less 分页器(我不确定)。在“man”Bash中,键入&%,然后键入Enter。它将只显示包含“%”的行。要重新显示所有行,键入&,然后键入Enter。

klr1opcd

klr1opcd8#

只需使用killall命令:
全部清除任务名
要获得更多信息和更高级的选项,请键入“man killall”。

相关问题