在Linux下查找java进程的pid

你好我在Java程序中使用MPJ库为Pagerankalgorithm。 我编译它

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

并经过

 mpjrun.sh -np 2 MpiPageRank 

其中-np是进程数

现在我必须find它的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中提取MpiPageRank来获得它的pid,即27866 。 我怎么做 ?

Solutions Collecting From Web of "在Linux下查找java进程的pid"

使用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 ,但是如果你使用& (后台)运算符,你可以通过你的shell获取pid ,使用$! 变量。

例如:

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

java -jar .. & command, $! 将被设置为最后一次背景工作的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。