我试图检查一个进程(假设它被调用some_process)是否正在服务器上运行.如果是,则回显1,否则回显0.
这是我正在使用的命令,但它只能部分工作(下面有更多信息).请注意,我需要在一行中编写脚本.
ps aux | grep some_proces[s] > /tmp/test.txt && if [ $? -eq 0 ]; then echo 1; else echo 0; fi
Run Code Online (Sandbox Code Playgroud)
注:本[s]中some_proces[s]是防止grep从返回本身.
如果some_process正在运行,那么"1"得到回应,这很好.但是,如果some_process没有运行,则不会回显任何内容.
Wil*_*ell 239
没有必要明确检查$?.做就是了:
ps aux | grep some_proces[s] > /tmp/test.txt && echo 1 || echo 0
Run Code Online (Sandbox Code Playgroud)
请注意,这依赖于echo不会失败,这当然不能保证.更可靠的方法是:
if ps aux | grep some_proces[s] > /tmp/test.txt; then echo 1; else echo 0; fi
Run Code Online (Sandbox Code Playgroud)
rua*_*akh 64
&&意思是"如果成功"; 通过将您的if声明放在它的右侧,您确保它只会在grep返回时运行0.要修复它,请;改用:
ps aux | grep some_proces[s] > /tmp/test.txt ; if [ $? -eq 0 ]; then echo 1; else echo 0; fi
(或者只是使用换行符).
小智 38
使用grep -vc忽视grep的ps输出,同时计数线.
if [[ $(ps aux | grep process | grep -vc grep) > 0 ]] ; then echo 1; else echo 0 ; fi
Run Code Online (Sandbox Code Playgroud)
Cos*_*atu 14
你可以充分利用这样的&&和||运算符:
ps aux | grep some_proces[s] > /tmp/test.txt && echo 1 || echo 0
Run Code Online (Sandbox Code Playgroud)
要排除grep本身,您还可以执行以下操作:
ps aux | grep some_proces | grep -vw grep > /tmp/test.txt && echo 1 || echo 0
Run Code Online (Sandbox Code Playgroud)
onc*_*nce 11
pgrep -q some_process && echo 1 || echo 0
Run Code Online (Sandbox Code Playgroud)
更多单线在这里