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

时间:2013-03-06 16:18:29

标签: bash kill pid

如果我运行的脚本使用&

启动多个进程
tail -f log file1 &
tail -f log file2 &

我怎样才能立刻关闭它们?

4 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:5)

killall tail应该可以解决这个问题,但它也会关闭你运行的任何其他尾程。

答案 2 :(得分:2)

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

据我所知,没有任何东西可以抓住所有东西;没有%*或等价物。

但你可以用

快捷方式
kill %1 %2 %3 %4 %5 %6 %7 %8

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

小心你杀了谁; - )

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

启动脚本
#!/usr/bin/bash

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

另一方面,jim's answer保存您正在启动的任何进程的pid(进程ID)是一种更安全的方法来杀死其他进程。

答案 3 :(得分:1)

“记住”孩子们。

tail -f logfile1 & 
pid1=$!

tail -f logfile2 &
pid2=$!

kill $pid1 $pid2

显然,你不会在你的真实剧本中发出类似的立即杀戮。您可能真的想等待子进程。但这就是你提出的问题