こんにちは、私は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
。それ、どうやったら出来るの ?
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に設定されます。
Awkを使用してpidを取得できます。
ps -ef | grep MpiPageRank | awk '{print $2}'
時々grep自体が見つかって削除されることに気付きました。
ps -ef | grep MpiPageRank | grep -v grep | awk '{print $2}'
jpsはpsと同じですが、Javaプロセスのみを参照します。
その後、PIDが必要な場合は、次のようなことができます。
jps | grep Java_NAME | awk '{print $1}'
これはjpsを実行し、grepを使用して、殺したいJavaアプリケーションまたはjarでフィルタリングします。その後、awkはpidのみをキャプチャしてコンソールに出力します。
簡単な方法はこれを実行することです:
pgrep Java