web-dev-qa-db-ja.com

LinuxでJavaプロセスのpidを見つける

こんにちは、私はMPJライブラリをJavaプログラムで使用しています。

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

今、私はそのpidを取得するために1つだけのLinuxコマンドからMpiPageRankを抽出したいです27866。それ、どうやったら出来るの ?

17
Shweta B. Patil

psを使用

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

ps -C Java -o pid

manページから:

   -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に設定されます。

24
c00kiemon5ter

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

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

時々grep自体が見つかって削除されることに気付きました。

ps -ef | grep MpiPageRank | grep -v grep | awk '{print $2}'
15
Abdullah Jibaly

jpsはpsと同じですが、Javaプロセスのみを参照します。

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

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

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

10
Jesan Fafon

簡単な方法はこれを実行することです:

pgrep Java
0
Eusuf Kanchwala