- PR -

Linuxへのpsコマンド実行でゴミ行が表示される?

1
投稿者投稿内容
ごんた
会議室デビュー日: 2005/06/27
投稿数: 18
投稿日時: 2007-03-16 13:48
連日投稿させて頂きます、ごんたです。

先日の投稿「JavaからLinuxマシン内のプロセスを操作する方法について」は、
複数アドバイス頂き解決したかに思えたのですが、そこで別の問題が発生してしまいました。

javaプログラムで、Runtime.execを使用して、”ps -ax |grep プロセス名”のコマンド
起動により、稼動中のプロセス名を取得する、って事をやってみたのですが、
不可思議な現象が発生しました。

<実行一回目>
8284 ? S 0:00 pgreplicateA
15576 ? R 0:00 /bin/sh -c ps -ax |grep pgreplicateA

<実行二回目>
8284 ? S 0:00 pgreplicateB
15580 ? S 0:00 /bin/sh -c ps -ax |grep pgreplicateB
15582 ? S 0:00 grep pgreplicateB

<実行三回目>
8284 ? S 0:00 pgreplicateC
15576 ? R 0:00 /bin/sh -c ps -ax |grep pgreplicateC

上記は、javaにて”ps -ax |grep pgreplicate”をループ実行させた結果なのですが
二回目の最終行の様に、ゴミの行(?)が出力されてしまう事があります。

割合的には4、5割くらいで、結構頻発していますが、手動で同じコマンドを入力しても
同じ現象は発生しません。

grep結果の編集方法次第では、ゴミの行が出たとしても、プロセス名が出力された行の
特定は出来ますが、出来れば原因を突き止めたいな、と思っております。

どなたか、原因をご存知の方、同現象の経験がある方いらっしゃれば、アドバイスお願い
いたします。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2007-03-16 14:14
引用:

ごんたさんの書き込み (2007-03-16 13:48) より:
上記は、javaにて”ps -ax |grep pgreplicate”をループ実行させた結果なのですが
二回目の最終行の様に、ゴミの行(?)が出力されてしまう事があります。


"ps -ax |grep pgreplicate"を実行したとすると、

/bin/sh -c ps -ax |grep pgreplicateB
ps -ax
grep pgreplicateB

という3つのプロセスが実行される事になります。
psが/procをトラバースしている間にgrepが起動される状況になると思うので、
タイミングによっては/bin/sh以外のプロセスも引っかかってしまうのでしょう。

grepを結果に含めたくないのならば、Runtime.execを行った
Java側で絞り込みをすれば不要な出力は現れなくなります。

他にも、多少移植性は損なわれますが(Redhatなら確実にあるはず)、
/sbin/pidofという目的にぴったりなコマンドもあります。
こちらは引数で指定された名前に一致するpidを全て列挙します。
やじゅう
常連さん
会議室デビュー日: 2005/08/10
投稿数: 34
お住まい・勤務地: 野獣の住処
投稿日時: 2007-03-16 14:18
それはそういうものです。手打ちで確認できなかったのは、たまたまでしょう。
「ゴミ」を除去したければ、grepの結果を更にgrepします。詳しくはman grepしてください。

ところでJava Solution会議室で、psやprepの結果について質問するのはどうかと思います。
ごんた
会議室デビュー日: 2005/06/27
投稿数: 18
投稿日時: 2007-03-16 14:44
ごんたです。早速アドバイス頂きありがとうございます。

toあしゅ様

 了解しました。java側で絞り込む方向でやりかけていましたが、教えて頂いたpidofコマンド
 が目的ぴったりの機能を持っていましたので、pidofを使用する事にしました。
 (事前調査が足りませんでした。お手間をとらせて申し訳ありません)

toやじゅう様

 たまたま手動入力で現象が発生しなかった為、Javaプログラムでのコマンド発行時の問題
 かもと思い、続けてこちらに投稿させて頂きました。
 しかしながらおっしゃる通り、Linuxコマンドの結果が問題である事を考慮すると、別会議室
 で質問すべきだったかもしれません。以降、その点を注意して投稿する様にします。

とにかく、連日丁寧にご回答頂き、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)