4

UNIXボックスで実行中のすべてのJavaプロセスを見つけようとしています。私はの間で混乱しています

ps –ef|grep java

ps –ef|grep *.java

どちらが正しいですか、正確な違いは何ですか?

PS:どちらも異なる結果セットを返します

の出力ps –ef|grep *.java

ps -ef | grep *.java
aaassa1  7507  2304  0 11:49 pts/4    00:00:00 grep *.java
4

2 に答える 2

6

grepテキストの一致のみを行い、プロセス名やファイル名などはわかりません。

つまり、 という python スクリプトがある場合はlikejava.py、それも結果になります。

質問に戻ります*.javaが、grep は glob パターンではなく正規表現で動作するため、あなたは良くありません。

あなたは試すことができます:

ps -ef|grep $(which java)これにより、Java プロセスがリストされますが、デフォルトの Java インストールについてのみです。Jboss に java7、Tomcat に java6、Eclipse に java5 など、複数の Java がインストールされている場合、これは失敗します。

と呼ばれる別のツールがありますpgrep。あなたはそれを試してみることができます、例えば

pgrep -l java

あなたはman pgrepより多くの情報を得るために行うことができます:

pgrep, pkill - look up or signal processes based on name and other attributes

編集小さなps..|grep トリックを追加

質問であなたの出力を見ました:

あなたはgrep *.java出力を持っています、それは良い例です。grep *.javaは Java プロセスではありませんが、「java」というテキストがあります。だからそこにあります。

ps...|grep [j]avaこれは、bashで動作することで回避できます。

于 2013-03-14T15:50:35.050 に答える
2

最初は正しいです。2番目の方法では、シェルが*.java現在の作業ディレクトリに基づいて拡張され、楽しい結果が得られます。

正確にそれらの結果は何ですか...私はここで推測していますが、ファイルがfoo.javaありbar.java、現在のディレクトリにあると仮定すると、後者は効果的に実行しています:

ps -ef | grep bar.java foo.java

これは、からのパイプ入力を無視して、foo.java内のbar.javaを検索するだけだと私は信じてpsいます。しかし、それについて私を引用しないでください-重要なのは、それはほぼ確実にあなたが望むものではないということです。

于 2013-03-14T15:40:10.780 に答える