我运行我的安全shell脚本以确保二进制文件正在运行
检查二进制文件是否正在运行我执行以下命令
pidof prog.bin | awk '{print NF}'
是一些系统,它在二进制文件未运行时给我0 和 在某些系统中它给我NULL(没有)
我可以使用-z选项检查NULL,但为什么awk命令以这种方式运行?
答案 0 :(得分:1)
您可以使用以下pidof
代替:
pgrep -qf prog.bin
并检查其退出状态。
根据man pgrep
:
-f Match against full argument lists. The default is to match against process names.
-q Do not write anything to standard output.
答案 1 :(得分:1)
你可以使用它,
if [ `pidof 'NetworkManager'` ]; then
echo "Running"
else
echo "Not Running"
fi
答案 2 :(得分:1)
awk
中处理此类事物(未定义变量)的一种方法是这样的:
echo hi | awk '{print a}'
与之相比:
echo hi | awk '{print a || 0}'
0
答案 3 :(得分:1)
如果是其他的<衬路
<强> [[ $(pidof 'NetworkManager') ]] && echo "Running" || echo "Not Running"
强>
答案 4 :(得分:1)
试试这个:
pidof prog.bin | awk '{ if (NF!=0) print NF }'
答案 5 :(得分:0)
以下是awk和NF的一些测试:
$ # regular line of input
$ echo foo | awk '{print NF}'
1
$ # empty line
$ echo | awk '{print NF}'
0
$ # a word on input with no newline
$ printf "%s" nonewline | awk '{print NF}'
1
$ # no input, not even a newline
$ printf %s | awk '{print NF}'
# no output from awk
我怀疑pidof
案例是最后一个:甚至不是换行符。强制换行:
echo $(pidof prog) | ...
printf "%s\n" "$(pidof prog)" | ...