如何杀死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”。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top