一旦terminalclosures,如何确保脚本及其命令被杀死

我写了一个脚本,它工作正常。 它做一些尾巴和grep操作。 当我closuresterminal并对脚本的PID进行写入时,我发现脚本仍然出现在“ps -eaf | grep -i myScript.sh”的输出中。 但是,我不希望这种行为。 我需要知道,我该如何处理这种情况。 我不想通过我的脚本给CPU造成负担。 请告诉我。 我search谷歌,我最主要的发现“如何保持脚本运行在后台”。 但是我无法得到任何关于停止它的精神。

提前致谢。

user 9405 18803 0 07:32 pts/72 00:00:00 grep 29735 user 29735 11903 0 07:24 pts/30 00:00:00 sh myScript.sh user 29818 29735 0 07:24 pts/30 00:00:00 tail -f --pid=29735 /var/log/message user 29830 29735 0 07:24 pts/30 00:00:00 -csh 

你的脚本运行在另一个shell上,并使用tail-f选项(跟随),在文件增长的时候附加输出。 简而言之,脚本没有退出点,所以即使你希望脚本这样做也不会结束。

tl;dr:创build一个bash退出钩子并从那里杀死你的后台作业。

细节:

  1. 在你的tail / grep脚本中创build一个PID文件,如下所示:

     echo $$ > $HOME/script.pid 
  2. 通过在你的$HOME/.bash_profilejoin类似这样的东西来为你的loginshell添加一个退出钩子:

     function finish { # Your cleanup code here kill -9 `cat $HOME/script.pid` } trap finish EXIT 
  3. 利润。

如果多次启用tail脚本,这将会中断。 这可以通过创build一个锁文件或跳过script.pid文件并在trap函数内部创build一个 killall <scriptname>来处理。