是否有shell命令会终止所有后台尾进程

doa*_*ave 6 bash pid kill

如果我运行与启动多个进程的脚本&

tail -f log file1 &
tail -f log file2 &
Run Code Online (Sandbox Code Playgroud)

我怎么能立刻关闭它们?

Ver*_*reb 9

您可以通过删除所有尾部命令 killall tail


Cfr*_*eak 5

killall tail 应该做的伎俩,但它也将关闭你运行的任何其他尾部进程.


cfi*_*cfi 3

您可以使用%1, %2, ... 习惯用法来引用当前 shell 中的后台作业。

据我所知,没有包罗万象的东西。没有%*或等效的。

但你可以捷径

kill %1 %2 %3 %4 %5 %6 %7 %8
Run Code Online (Sandbox Code Playgroud)

这将杀死当前 shell 中仍在运行的前八个后台进程。这可能是也可能不是tail

小心你杀的人;-)

如果您可以完全控制后台进程,这对您来说可能是一个安全的选择。既然您提到您想从 shell 脚本执行此操作,并且如果tails 是唯一的后台进程,那么这很简单。只需确保您的 shell 脚本启动一个子 shell,这样它就不会影响交互式 shell 的后台进程。例如,您可以使用以下命令启动脚本

#!/usr/bin/bash
Run Code Online (Sandbox Code Playgroud)

并在脚本上设置执行权限位,并始终按名称调用脚本。换句话说,你不应该使用source script_file那个脚本。

另一方面,吉姆的答案是保存正在启动的任何进程的 pid(进程 ID),这是杀死其他进程的更安全的方法。