簡體   English   中英

無法理解ps | wc輸出差異

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

更好的是,如果可以依靠pidofpgrep則可以依靠它們出現在目標系統中。 或使用LSB功能(如果您使用的是Linux)。

編輯:實際上,由於您正在尋找自己正在運行的副本,因此您可能會撿起外殼來進行分叉以實現管道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM