linux-注销和登录时bash脚本的多个实例教程
我做了一个简单的脚本,它可以无限循环地工作.看起来像这样:
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.