2014-11-25 53 views
3

在bash腳本,我嘗試使用下面的行,以確定是否另一個進程正在執行當前的腳本:

/sbin/pidof -x $0 |wc -w

但反應總是2,而不是1的預期值。

我已經試過以下呼叫:
/sbin/pidof -x $0返回1 PID
/sbin/pidof -x $0 |wc -w回報2
/sbin/pidof -x $0 |head回報2周的PID
/sbin/pidof -x $0 |head |wc -w回報2
/sbin/pidof -x $0 |head |tail回報2周的PID
/sbin/pidof -x $0 |head |tail |wc -w回報2

任何人都可以提出一種替代(或修復),以實現我想要做的,並解釋爲什麼輸出管道,以什麼引起的pidof輸出去「有點有趣」?


這是劇本目前是如何使用的pidof,工作正常:

RUNNING=`/sbin/pidof -x $0` 
RUNNING=`echo -n ${RUNNING} | wc -w` 
[[ ${RUNNING} -gt 1 ]] && return 

回答

1

如果你只是試圖阻止第二行書下面會做的伎倆:

pid=/tmp/$(basename $0).pid 
[ -e $pid ] && exit 0; 
trap 'rm -f $pid >/dev/null 2>&1;' 0 
trap 'exit 2' 1 2 3 15 
touch $pid 

剛開始你的腳本與這些行。基本上它會檢查文件並在文件存在時停止執行。請注意,如果您殺死(-9)正在運行的腳本,您將負責清理已創建的pid文件。殺死(-9)繞過將會清理pid文件的shell陷阱。

+0

是的,有一堆替代品使用鎖定文件等,但我只對使用實時流程檢查感興趣。 pidof的確能完成這項工作,但我正試圖理解爲什麼它的行爲方式如此。 – StampyCode 2014-11-25 11:54:46