如何在bash脚本中静静地使用unix kill命令?

我试图检查一个特定的进程是否正在运行,如果是,请尝试并杀死它。

到目前为止,我已经提出了以下内容:

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是空的而不是相反,所以你的测试是颠倒的。

你应该使用pgrep如果你的系统上也有。 (甚至更好:停止并停止对所有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" 

所有列出的方法都比长管道管道优越

尝试在您的情况下if [ X$PID != X ] 。 这是检查字符串是否为空的惯用方法。