UNIXでは、次のコマンドを実行してプロセスが開始されたことを確認します。
例えば
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変数を完全に削除してみました。
私がここで何を見逃しているのでしょうか?私の正規表現がどこかに間違っていることを知っています:(
ありがとう
ベストアンサー1
このコマンドは、互換pgrep
性のある正規表現に一致するすべてのプロセス(自体を除く)のPIDリストを印刷しますgrep
。
一致するものがなければ、何も印刷されません。
これは十分なテストでなければなりません。[ $(pgrep process | wc) -gt 0 ]
プロセスが実行中の場合は true です。なければ偽です。