注销和登录时,BASH脚本的多个实例



我制作了简单的脚本,可在无限循环中起作用。看起来这样:

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

相关内容

  • 没有找到相关文章

最新更新