仕事用に書いているプログラムがあります。
Sco Unix サーバーに接続し、コマンドを実行します。ほとんどの場合、正常に動作します。
String command = "ps -eo ruser,pid,ppid,stime,etime,tty,args | sort -k4 | grep /PGProcid="+ProcID+"\\ | grep -v grep";
たとえば、出力は次のようになります
ps -eo ruser,pid,ppid,stime,etime,tty,args | sort -k4 | grep /PGProcid=1\ | grep -v grep
ただし、これを単一の数値 (通常は 1 ですが、それに限定されません) に対して実行しようとすると、結果が存在することを知っていても、結果が得られません。
たとえば、サーバーで次の結果が得られた場合
# ps -ef | grep /PGProcid=1
name 29175 29174 0 02:55:57 ttyp15 00:00:00 /xxx/xxx/xxx/prog6 /PGProcid=14
person2 28201 28199 0 01:15:27 ttyp13 00:00:00 /xxx/xxx/xxx/prog1 /PGProcid=1
次に、次のことを行うと
# ps -ef | grep /PGProcid=1\
結果は得られませんが、1 の結果があることはわかっています。14 のように 2 桁の数字を使用すると、上記が機能し、結果が返されます。
基本的に、/PGProcid= を grep して PID および PPID 番号を取得できる必要があります。これは、1 & 10,11,12 など、または 2 & 20,21,22 などがある場合にのみ機能しないようです。
$ を使用して Egrep を試してみましたが、常に 1 桁の数字をスキップしているようです。
編集:これが私がこのサーバーで試したことです
# echo $SHELL
/bin/sh
ps -ef | grep PGProcid=2
amanda 23602 25207 0 09:22:58 ? 00:00:06 /xxxxxx /PGProcid=2
amanda 25207 25203 0 Feb-28 ? 00:00:01 /xxxxxx /PGProcid=2
root 26389 26034 0 05:15:22 ttyp6 00:00:00 grep PGProcid=2
amanda 26042 23602 0 04:46:16 ? 00:00:04 /xxxxxx /PGProcid=2
そのため、2 は現在サーバー上でアクティブですが、以下では結果が得られません
# ps -ef | grep /PGProcid=2$
# ps -ef | grep /PGProcid=2\$
# ps -ef | grep "/PGProcid=2$"
以下は結果を示しますが、2が含まれているものもすべてピックアップするため、22などは2の後にのみ表示されます
# ps -ef | grep '/PGProcid=2$'
以下に「そのようなファイルまたはディレクトリはありません」というエラーが表示されます
# ps -ef | grep `/PGProcid=2$`