你好我在java程序中使用MPJ库进行Pagerank算法。 我按
编译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
现在我想从1个linux命令中提取MpiPageRank
来获取它的pid即27866
。
我该怎么做?
答案 0 :(得分:22)
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.
通过指定更多限制(即运行进程的用户等),可以获得更准确的结果。查看手册页以获取更多信息和其他开关。
示例:
$ sleep 10 &
[1] 12654
$ ps -C sleep -o pid
12654
我不知道您为什么使用.sh
脚本来运行代码而不直接调用java
,但如果在任何情况下使用&
(背景)运算符,您可以使用pid
变量通过shell获取$!
。
例如:
$ sleep 5 &
[1] 12395
$ echo $!
12395
{p>同样适用于java -jar .. &
命令,$!
将设置为最后一个后台作业的pid。
答案 1 :(得分:15)
您可以使用awk获取pid:
ps -ef | grep MpiPageRank | awk '{print $2}'
我注意到有时grep本身被找到,要删除它:
ps -ef | grep MpiPageRank | grep -v grep | awk '{print $2}'
答案 2 :(得分:9)
jps与ps相同,只是它只查看java进程。
如果您需要PID,可以执行以下操作:
jps | grep JAVA_NAME | awk '{print $1}'
运行jps,然后使用grep过滤要杀死的java应用程序或jar。之后,awk捕获并将pid打印到控制台。
答案 3 :(得分:0)
一种简单的方法是运行它:
pgrep java
答案 4 :(得分:0)
ps -ef | grep java | grep MpiPageRank | grep -v grep | awk'{print $ 2}'
这将返回正在运行的所有Java进程中MpiPageRank的确切pid