[英]bash: counter inside a while loop (kill and kill -9)
所以我最近了解到kill不是同步命令,所以我在bash中使用while循環,這很棒:
while kill PID_OF_THE_PROCESS 2>/dev/null; do sleep 1; done
但是,有些情況(非常罕見,但它們仍然會發生),其中進程被卡住,並且它不會對kill信號起作用。 在這些情況下,殺死應用程序的唯一方法是使用“ kill -9 ”。
所以我想知道,如果循環已達到第10次迭代,如何在bash中修改上面的while循環以使用-9參數?
正如其他用戶所說....你必須在使用這種野蠻方法之前解決阻塞的原因......無論如何......試試這個
#!/bin/bash
i=0
PID_OF_THE_PROCESS="your pid you can set as you like"
# send it just once
kill $PID_OF_THE_PROCESS 2>/dev/null;
while [ $i -lt 10 ];
do
# still alive?
[ -d /proc/$PID_OF_THE_PROCESS ] || exit;
sleep 1;
i=$((i+1))
done
# 10 iteration loop and still alive? be brutal
kill -9 $PID_OF_THE_PROCESS
當然,使用一個櫃台,但這有點火腿。
您可能真正想要做的是使用0
作為您的信號,這對過程無效,但讓您檢查過程是否仍然存在。 (如果進程不存在, kill -0 $pid
將返回非零退出狀態。)然后,你知道,不要只是kill -9
它。 進程不會無緣無故地卡住,它們會因為無法釋放資源而陷入困境,例如發生網絡或文件系統阻塞時。 解決塊,然后該過程可以自行清理。
一次發送信號就足夠了。
kill $PID 2>/dev/null
sleep 10;
if kill -0 $PID 2>/dev/null
kill -9 $PID
fi
對於你的反問題:
c=0
while true; do
echo $c;
c=$((c+1));
if [ $c -eq 10 ]; then break; fi;
done
有幾種方法可以實現這一點,但您確實要求修改現有的循環,因此:
count=0
while kill PID_OF_THE_PROCESS 2>/dev/null
do
sleep 1;
(( count++ ))
if (( count > 9 ))
then
kill -9 PID_OF_THE_PROCESS 2>/dev/null
fi
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.