我做了一个简单的脚本,它可以无限循环地工作.看起来像这样:

while :
do
   #operations
   sleep 5
done

并将其添加到自动运行程序like this中.

一切正常,但是注销后,我有2个该脚本过程的实例(下一次注销后有3个实例,依此类推).它们中只有一个显示通知,但是它们都运行自己的睡眠过程.

我该怎么做才能解决这个问题?


解决方法:

注销并不会杀死所有进程.您需要自己杀死该过程.一种方法是在脚本中添加条件终止.

例:

#!/bin/bash
for proc in $(pgrep $(basename "$0"));do
[[ $proc -ne $$]] && kill $proc
done
while :
do
   #operations
  sleep 5
done

如果您两次运行此脚本,则第二个脚本将杀死前一个脚本,并确保一次仅运行该脚本的一个实例.

如果使用该过程的用户不止一个,那么您可能希望它是针对特定用户的.为此,更改以下行:

[[ $proc -ne $$]] && kill $proc

至:

[[ $(echo $(pgrep -u $USER) | grep -o $proc) -ne $$]] && kill $proc

注意:有时,当正常的kill命令不足以杀死它们时,您的进程可能会进入失效状态.在这种情况下,请使用kill -9.

标签: shell, bash, linux

相关文章推荐

添加新评论,含*的栏目为必填