Kill

了解在文件夾下執行的所有腳本 PIDS 的正確方法是什麼

  • May 5, 2021

在 Linux 機器上的文件夾下/home/testing/scripts,我們有 234 個不同的腳本,用於進行健全性和測試

作為

/home/testing/scripts/test.network.py
/home/testing/scripts/test.hw.py
/home/testing/scripts/test.load.sh
.
.
.

在某些情況下,我們想殺死所有正在執行的腳本

所以為了找到正在執行的腳本 pids 我們這樣做

lsof /home/testing/scripts/

並殺死我們使用的所有pid:

for proccess in `lsof /home/testing/scripts/ | awk '{print $2}' | grep -v proccess`; do kill $proccess; done

假設我們只執行腳本 -/home/testing/scripts/test.network.py

ps -ef |grep "testing/scripts"我們得到

root      5793 17546 84 09:20 ?        00:00:00 python3 -u /home/testing/scripts/test.network.py

所以lsof我們應該得到與

lsof /home/testing/scripts/

現在,我只是想知道我的方法是否

for proccess in `lsof /home/testing/scripts/ | awk '{print $2}' | grep -v proccess`; do kill $proccess; done

足以殺死所有正在執行的腳本/home/testing/scripts/

或者其他建議?

您可以稍微整理一下命令,但在我看來,它已經相當準確了。我會更緊密地匹配文件名以減少潛在的不匹配,並且我會確保每個候選 PID 實際上是數字,

lsof | awk -v p='^/home/testing/scripts/' '$9~p && $2+0 {print $2}' | sort -u | xargs echo kill

請注意在目錄分配給變數^的開頭。您還應該轉義可以解釋為正則表達式一部分的字元(即應該表示為、as等)awk``p``.``\.``*``\*

echo當您準備好讓腳本真正執行終止操作時刪除。

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