如何确保终端关闭后脚本及其命令被终止

如何确保终端关闭后脚本及其命令被终止

我编写了一个脚本,它运行良好。它执行一些 tail 和 grep 操作。当我关闭终端并 grep 脚本的 PID 时,我发现该脚本仍然存在于“ps -eaf |grep -i myScript.sh”的输出中。但是我不想出现这种情况。我需要知道,我该如何处理这种情况。我不想让我的脚本给 CPU 带来负担。请告诉我。我在谷歌上搜索,我主要找到了“如何让脚本在后台运行”。但我找不到任何关于停止它的具体信息。

提前致谢。

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

答案1

您的脚本在另一个 shell 上运行,并使用-f选项 (follow),该tail选项会在文件增长时附加输出。简而言之,脚本没有退出点,因此它不应该结束,即使您希望脚本结束。

答案2

tl;dr:创建一个bash 退出钩子并从那里终止你的后台工作。

细节:

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

    echo $$ > $HOME/script.pid
    
  2. 通过向您的登录 shell 添加一个退出钩子,方法是将如下内容添加到您的$HOME/.bash_profile

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

如果你tail多次调用脚本,这种情况就会发生。这可以通过以下方式处理创建锁文件或者跳过文件并在函数内部script.pid制作。killall <scriptname>trap

相关内容