在 centos 的 shell 脚本中,我写了以下两行
cmdread="Myprogram"
kill -9 `ps ax | grep $cmdread `
但有时当我手动停止我的程序时,我的 shell 脚本会警告我没有什么可终止的。那么如何检查呢?如下所示
if(by grep myprogram's pid != null){
kill it
}
答案1
为了达到您的目的,您必须将程序的 PID 传递给 kill 命令,如下所示:
cmdread="Myprogram"
_PID=`ps ax | grep $cmdread | grep -v grep | awk '{print$1}'`
if [[ "x$_PID" != "x" ]]
then
kill -9 $_PID
fi
更新
我将其添加grep -v grep
到我的代码中,尽管没有它,我的代码也能正常运行,因为我们可以将多个 PID 传递给kill
命令。
答案2
为了更安全的进程管理,我会使用适当的保留变量$!
,或者pgrep
如果你在 CentOS 上有它。
例如
#!/bin/sh
cmdread=$(myprogram)
mypid=$!
kill -0 $mypid && printf '%s\n' "My process is stil alive"
kill $mypid
使用 pgrep
kill $(pgrep programname)
使用 grepif ps -ef | grep '[p]rogramname' | grep -q programname; then pkill programname; fi
请参阅以下链接http://mywiki.wooledge.org/ProcessManagement以便更好地理解流程管理。