&
如果我运行一个脚本来启动多个进程
tail -f log file1 &
tail -f log file2 &
我怎样才能一次将它们全部关闭?
您可以通过以下方式杀死所有尾部命令
killall tail
killall tail
应该可以解决问题,但它也会关闭您正在运行的任何其他尾进程。
“记住”孩子的pid。
tail -f logfile1 &
pid1=$!
tail -f logfile2 &
pid2=$!
kill $pid1 $pid2
显然,您不会像在真实脚本中那样立即发出杀戮。您可能真的想等待子进程。但这可以满足您的要求
%1
您可以使用, %2
, ... 成语来引用当前 shell 中的后台作业。
据我所知,没有什么可以一网打尽。没有%*
或等效的。
但是您可以使用快捷方式
kill %1 %2 %3 %4 %5 %6 %7 %8
这将杀死仍在当前 shell 中运行的前八个后台进程。这可能是也可能不是tail
。
小心你杀了谁;-)
如果您可以完全控制后台进程,这对您来说可能是一个安全的选择。既然您提到要从 shell 脚本执行此操作,并且如果tail
s 是唯一的后台进程,那么这很简单。只需确保您的 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.