[英]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.