[英]Can't understand ps | wc output differences
我试图编写一组函数,这些函数可以在遇到意外输出时检查进程名称是否正在运行。 我在以下脚本名称isRunning.sh中浓缩了该问题,该脚本名称取决于可以使用'-fC'参数的系统ps命令...
#!/bin/bash
progname=isRunning.sh
ps -fC isRunning.sh
pRet=`ps -fC ${progname} | wc -l`
echo pRet $pRet
psOut=`ps -fC ${progname}`
wcOut=`echo "${psOut}" | wc -l`
echo
echo ps output
echo "${psOut}"
echo
echo wcOut $wcOut
第一次尝试将ps输出传递给wc的返回值为3。第二次尝试的预期返回值为2。有人可以解释此现象吗? 我认为这一定是我忽略的愚蠢之举。
谢谢,bbb
编辑:我的输出
UID PID PPID C STIME TTY TIME CMD
root 6717 5940 0 13:10 pts/0 00:00:00 /bin/bash ./isRunning.sh
pRet 3
ps output
UID PID PPID C STIME TTY TIME CMD
root 6717 5940 0 13:10 pts/0 00:00:00 /bin/bash ./isRunning.sh
wcOut 2
我都尝试两次。 您的ps可能正在输出一个额外的空白行或类似的行,然后您的shell的反引号扩展剥离了它。 或者,也许您实际上有两个匹配的过程在您第一次运行时就匹配了。
如果只想查看其运行状态,请检查ps的退出代码:
if ps -C "${progname}" > /dev/null; then
echo its running
else
echo not running
fi
更好的是,如果可以依靠pidof
和pgrep
则可以依靠它们出现在目标系统中。 或使用LSB功能(如果您使用的是Linux)。
编辑:实际上,由于您正在寻找自己正在运行的副本,因此您可能会捡起外壳来进行分叉以实现管道。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.