簡體   English   中英

如何在bash腳本中靜默使用unix kill命令?

[英]How can you use the unix kill command silently in a bash script?

我正在嘗試檢查特定進程是否正在運行,如果正在運行,請嘗試將其殺死。

到目前為止,我已經提出了以下建議:

PID=$(ps aux | grep myprocessname | grep -v grep | awk '{print $2}')

if [ -z $PID];
then    
    echo Still running on PID $PID, attempting to kill..
    kill -9 $PID > /dev/null
fi

但是,當我運行它時,得到以下輸出:

kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]

靜默終止UNIX上正在運行的進程的最佳方法是什么?

[ -z $PID]

如果$PID為空,則為true,反之則不然,因此您的測試將被反轉。

如果您的系統上也有pgrep則應該使用它。 (或pkill是:請pkill並停止擔心所有這些shell邏輯。)

答案更容易
程序“ killall”幾乎是所有發行版的一部分。

例子:

killall name_of_process &> /dev/null
killall -9 name_of_process &> /dev/null
(( $? == 0)) && echo "kill successful";

現在也有“ pkill”和“ pgrep”示例:

pkill -9 bash &> /dev/null
(( $? == 0)) && echo "kill successful";

例:

for pid in $(pgrep bash); do
 kill -9 $pid &> /dev/null
 (( $? == 0)) && echo "kill of $pid successful" || echo "kill of $pid failed";
done

最后,在示例中使用“ ps”時,這是一種無需“ grep”,“ grep -v”和“ awk”的使用情況的更好方法:

PIDS="$(ps -a -C myprocessname -o pid= )"
while read pid; do 
  kill -9 $pid &> /dev/null
  ((!$?)) && echo -n "killed $pid,"; 
done <<< "$p"

列出的所有方法都比長管-管-管imho更好

嘗試在您的情況下if [ X$PID != X ] 這是檢查字符串是否為空的通常習慣用法。

暫無
暫無

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

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