簡體   English   中英

注銷和登錄時的多個bash腳本實例

[英]Multiple instances of bash script upon logout and login

我制作了簡單的腳本,它在無限循環中工作。 它看起來像這樣:

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

如果您運行此腳本兩次,則第二個將終止前一個腳本,並確保一次只運行此腳本的一個實例。

如果有多個用戶使用該流程,那么您可能希望它是特定於用戶的。 為此,更改行:

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

至:

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

注意:有時,當正常的kill命令不足以殺死它們時,你的進程可能會進入一個已停止的狀態。 在這些情況下使用kill -9

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM