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
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で動作することで回避できます。
最初は正しいです。2番目の方法では、シェルが*.java
現在の作業ディレクトリに基づいて拡張され、楽しい結果が得られます。
正確にそれらの結果は何ですか...私はここで推測していますが、ファイルがfoo.java
ありbar.java
、現在のディレクトリにあると仮定すると、後者は効果的に実行しています:
ps -ef | grep bar.java foo.java
これは、からのパイプ入力を無視して、foo.java内のbar.javaを検索するだけだと私は信じて重要なのは、それはほぼ確実にあなたが望むものではないということです。ps
います。しかし、それについて私を引用しないでください-