正規表現を使用してUNIXプロセスが開始されたことを確認する

正規表現を使用してUNIXプロセスが開始されたことを確認する

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 です。なければ偽です。

おすすめ記事