在UNIX中,我正在通過執行以下命令來檢查進程是否已啓動;如何檢查Unix進程是否在Perl中運行?
E.g.
psg dtllst pe99
如果進程正在運行,則返回以下輸出;
UID PID PPID C STIME TTY TIME CMD
pe99 1234 1 0 03:29:44 pts/8 0:01 dtllst pe99
現在在Perl中,我想能夠找出這個過程是否啓動。到目前爲止,我做了以下
`my $checkProc = `psg dttlst | grep $myNode 2>&1`;` #where $myNode is something like pe01 or pe02 or pe65 or pe99 etc...
在此之後現在我做以下,看看上面的Perl命令已經回到我所期待的,看看這個過程是向上;
if ($checkProc =~ m/dtllst $myNode | $myNode/) {
#yes, process is up
} else {
#no, process is down
}
但是這不起作用 - 具體地說,無論UNIX進程是否存在,我的代碼總是評估if語句爲true。我知道這是錯誤的。 我試圖逃避正則表達式中的「$」字符,看看是否是這個問題,我也嘗試從正則表達式中刪除Perl變量。
我在這裏錯過了什麼?我知道我的正則表達式是錯誤的地方:(
感謝
我們不知道你的'psg'別名或shell函數是什麼。我們看到你的''$ checkProc = ...'行中有反引號,這可能是一個語法錯誤。我們看到你將'psg'管入'grep'中,如果'psg'已經是包含grep的別名,這對我沒有任何意義。重要的是,我們不知道'$ checkProc'和'$ myNode'的內容 - 如果'$ myNode'爲空,那麼你的正則表達式將會匹配任何一個空格字符,這可以解釋你的症狀。 – pilcrow 2010-10-02 14:00:36