24

Linux コンピューターで Java プログラムを実行していて、そのプロセスのプロセス ID (pid) を見つけたいと考えています。コマンドがこの情報を提供できることは知っていpsますが、無関係な情報が多すぎるため、その出力は混乱を招きます。どうすればpidだけを取得できますか?


PagerankアルゴリズムのJavaプログラムでMPJライブラリを使用しています。私はそれをコンパイルします

javac -cp .:$MPJ_HOME/lib/mpj.jar MpiPageRank.java

によって実行されます

mpjrun.sh -np 2 MpiPageRank

-npプロセス数はどこですか

今、私はそのpidを見つけなければなりません

ps -ef|grep java

お気に入り

mpjrun.sh -np 2 MpiPageRank & sleep 2
ps -ef | grep java

私は得る

pnewaska 27866 27837 99 21:28 pts/45   00:00:09 java -cp /u/pnewaska/mpj-v0_38/lib/smpdev.jar:/u/pnewaska/mpj-v0_38/lib/xdev.jar:/u/pnewaska/mpj-v0_38/lib/mpjbuf.jar:/u/pnewaska/mpj-v0_38/lib/loader2.jar:/u/pnewaska/mpj-v0_38/lib/starter.jar:/u/pnewaska/mpj-v0_38/lib/mpiExp.jar runtime.starter.MulticoreStarter /nfs/nfs1/home/pnewaska/DistributedSystems/Project3 10 smpdev useLocalLoader EMPTY MpiPageRank -i input.500k0 -n 10 -o

MpiPageRankここで、1 つの Linux コマンドのみから抽出して、pid ie を取得したいと考えてい27866ます。それ、どうやったら出来るの ?

4

5 に答える 5

29

使用してps

psユーザーは、-oスイッチを使用して出力の独自のフォーマットを定義-Cし、指定されたコマンドでエントリを選択できます。私は一緒に行きます:

ps -C java -o pid

マニュアルページから:

   -C cmdlist      Select by command name
                   This selects the processes whose executable name is given in cmdlist.

   -o format       user-defined format.
                   format is a single argument in the form of a blank-separated or comma-separated list, which offers a way to specify
                   individual output columns. The recognized keywords are described in the STANDARD FORMAT SPECIFIERS section below. Headers
                   may be renamed (ps -o pid,ruser=RealUser -o comm=Command) as desired. If all column headers are empty
                   (ps -o pid= -o comm=) then the header line will not be output. Column width will increase as needed for wide headers; this
                   may be used to widen up columns such as WCHAN (ps -o pid,wchan=WIDE-WCHAN-COLUMN -o comm). Explicit width control
                   (ps opid,wchan:42,cmd) is offered too. The behavior of ps -o pid=X,comm=Y varies with personality; output may be one
                   column named "X,comm=Y" or two columns named "X" and "Y". Use multiple -o options when in doubt. Use the PS_FORMAT
                   environment variable to specify a default as desired; DefSysV and DefBSD are macros that may be used to choose the default
                   UNIX or BSD columns.

より多くの制限 (つまり、プロセスを実行するユーザーなど) を指定することで、より正確な結果を得ることができます。詳細およびその他のスイッチについては、man ページを参照してください。

例:

$ sleep 10 &
[1] 12654
$ ps -C sleep -o pid
12654

シェルを使用する

.shスクリプトを使用してコードを実行し、直接呼び出さない理由はわかりませんjavaが、いずれにせよ&(バックグラウンド) 演算子を使用すると、変数を使用pidしてシェルを介して取得できます。$!

例えば:

$ sleep 5 &
[1] 12395
$ echo $!
12395

java -jar .. &コマンドも同様$!で、最後のバックグラウンド ジョブの pid に設定されます。

于 2012-04-18T02:02:57.510 に答える
17

awk を使用して pid を取得できます。

ps -ef | grep MpiPageRank | awk '{print $2}'

それを削除するために、時々 grep 自体が見つかることに気付きました:

ps -ef | grep MpiPageRank | grep -v grep | awk '{print $2}'
于 2012-04-18T01:40:55.027 に答える
12

jpsは、Javaプロセスのみを参照することを除いて、psと同じです。

その後、PIDが必要な場合は、次のようにすることができます。

jps | grep JAVA_NAME | awk '{print $1}'

これはjpsを実行し、grepを使用して強制終了するJavaアプリケーションまたはjarでフィルタリングします。その後、awkはpidだけをキャプチャしてコンソールに出力します。

于 2012-09-12T15:57:56.037 に答える