我制作了简单的脚本,可在无限循环中起作用。看起来这样:
while :
do
#operations
sleep 5
done
,我将其添加到这样的自动计划中。
一切正常,但是注销后,我有2个脚本过程的实例(下次注销后3个)。其中只有一个显示通知,但它们都运行自己的sleep
进程。
我该怎么办来解决这个问题?
注销不会杀死所有进程。您需要自己杀死该过程。一种方法是在脚本中添加有条件的kill
。
示例:
#!/bin/bash
for proc in $(pgrep $(basename "$0"));do
[[ $proc -ne $$ ]] && kill $proc
done
while :
do
#operations
sleep 5
done
如果您两次运行此脚本,第二个脚本将杀死前一个/s,并确保一次只运行此脚本的一个实例。
如果有多个用户使用该过程,那么您可能希望它特定于用户。为此,更改行:
[[ $proc -ne $$ ]] && kill $proc
to:
[[ $(echo $(pgrep -u $USER) | grep -o $proc) -ne $$ ]] && kill $proc
注意:有时,当普通kill
命令不足以杀死它们时,您的过程可能会陷入已倒闭状态。在这种情况下使用kill -9
。