如果我运行的脚本使用&
tail -f log file1 &
tail -f log file2 &
我怎样才能立刻关闭它们?
答案 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
显然,你不会在你的真实剧本中发出类似的立即杀戮。您可能真的想等待子进程。但这就是你提出的问题