Shell-Script

從腳本本身殺死腳本的多個實例

  • September 18, 2020

我有幾個 script.sh 實例並行執行,做同樣的事情,在後台執行。

我正在嘗試使用一個函式在執行時殺死所有目前正在執行的腳本。

因此,例如, ./script.sh -start 將啟動腳本(我可以並行執行幾個腳本),當我執行時 ./script.sh -kill 將殺死腳本的所有實例。

f() {
   procName=`basename $0`
   pidsToKill=`ps -ef | grep $procName | grep -v grep | awk '{ print $2 }'`
   if [[ $pidsToKill ]]; then
       for i in $pidsToKill; do
           kill -9 $i
       done
       echo "Killed running scripts."
   else
       echo "No opened scripts to kill"
   fi
}

出於某種原因,有時它會殺死幾個腳本,有時會返回錯誤。

我想出了一種方法來解決這個問題,但我想了解為什麼這個方法不起作用。有任何想法嗎?

腳本可能會自殺。您可以嘗試在單獨的子 shell 中執行 for 循環( for i in $pidsToKill; do kill -9 $i; done; echo All dead. ) &,然後退出腳本。

引用自:https://unix.stackexchange.com/questions/150965