如何在 shell 脚本中使用 grep 命令检查空值?

如何在 shell 脚本中使用 grep 命令检查空值?

在 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以便更好地理解流程管理。

相关内容