我编写了一个脚本,它运行良好。它执行一些 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 退出钩子并从那里终止你的后台工作。
细节:
tail
在你的/脚本中创建一个 PID 文件,grep
如下所示:echo $$ > $HOME/script.pid
通过向您的登录 shell 添加一个退出钩子,方法是将如下内容添加到您的
$HOME/.bash_profile
:function finish { # Your cleanup code here kill -9 `cat $HOME/script.pid` } trap finish EXIT
利润。
如果你tail
多次调用脚本,这种情况就会发生。这可以通过以下方式处理创建锁文件或者跳过文件并在函数内部script.pid
制作。killall <scriptname>
trap