8

&如果我运行一个脚本来启动多个进程

tail -f log file1 &
tail -f log file2 &

我怎样才能一次将它们全部关闭?

4

4 回答 4

11

您可以通过以下方式杀死所有尾部命令 killall tail

于 2013-03-06T16:20:55.637 回答
5

killall tail应该可以解决问题,但它也会关闭您正在运行的任何其他尾进程。

于 2013-03-06T16:20:24.093 回答
4

“记住”孩子的pid。

tail -f logfile1 & 
pid1=$!

tail -f logfile2 &
pid2=$!

kill $pid1 $pid2

显然,您不会像在真实脚本中那样立即发出杀戮。您可能真的想等待子进程。但这可以满足您的要求

于 2013-03-06T16:22:08.837 回答
3

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

据我所知,没有什么可以一网打尽。没有%*或等效的。

但是您可以使用快捷方式

kill %1 %2 %3 %4 %5 %6 %7 %8

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

小心你杀了谁;-)

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

#!/usr/bin/bash

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

On the other hand, jim's answer to save the pids (process ids) of any process you are starting is a much more safe way of killing other processes.

于 2013-03-06T16:25:53.577 回答