Linux

我們如何編寫腳本來殺死 PID(如果 else 循環)?

  • January 13, 2020

我有一個包含多個 PID 的文件,如下所示。

#cat /scripts/pid.txt
12345
23456
34567
45678

我必須編寫一個腳本,它會從上面的文件中一個一個地讀取 PID 並殺死它們。如果腳本卡住,如果任何 PID 沒有被殺死,腳本應該退出並進行下一個 PID 殺死。

這是我的腳本:

filename_java=/scripts/pid.txt
cat ${filename_java} | while read line
do

echo "The $line PID is still running" >> 
$TC_LOGS/killing_pid_aftershutdown_$DATE.txt
echo "killing the PID $line " >> 
$TC_LOGS/killing_pid_aftershutdown_java_$DATE.txt
kill -15 $line && sleep 5
mail -s "Admin console is shutdown gracefully" -r $LOGNAME@$HOSTNAME <email 
id> < /dev/null

done

在逐個讀取 pid 之前,我們應該檢查文件是否具有該 PID,如果是則殺死它們,如果不退出。

謝謝桑托什 G。

在微不足道的層面上,我不完全確定為什麼這還不夠。

[[ -s "/scripts/pid_$DATE.txt" ]] && kill $(cat "/scripts/pid_$DATE.txt")

還是您只需要殺死第一個,而其他人則不理會?

if [[ -s "/scripts/pid_$DATE.txt" ]] 
then
   while IFS= read -r pid
   do
       kill "$pid" && break
   done <"$scripts/pid_$DATE.txt"
fi

在這兩種情況下,都假定腳本具有足夠的權限來向目標程序發出信號,並且"$scripts/pid_$DATE.txt"文件或者不存在,或者是受信任的並且是最新的。

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