在Linux下找到java进程的pid

Shw*_*til 18 java linux grep pid ps

您好我在java程序中使用MPJ库进行Pagerank算法.我编译它

javac -cp .:$MPJ_HOME/lib/mpj.jar MpiPageRank.java
Run Code Online (Sandbox Code Playgroud)

并运行

mpjrun.sh -np 2 MpiPageRank
Run Code Online (Sandbox Code Playgroud)

-np进程数在哪里

现在我必须找到它的pid

ps -ef|grep java
Run Code Online (Sandbox Code Playgroud)

喜欢

mpjrun.sh -np 2 MpiPageRank & sleep 2
ps -ef | grep java
Run Code Online (Sandbox Code Playgroud)

我明白了

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
Run Code Online (Sandbox Code Playgroud)

现在我想MpiPageRank从只有1个linux comman中提取它的pid即27866.我怎么做 ?

c00*_*ter 24

运用 ps

ps允许用户使用-o开关为其输出定义自己的格式,并-C通过给定命令选择条目.我会选择:

ps -C java -o pid
Run Code Online (Sandbox Code Playgroud)

从手册页:

   -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.
Run Code Online (Sandbox Code Playgroud)

通过指定更多限制(即运行进程的用户等),可以获得更准确的结果.查看手册页以获取更多信息和其他开关.

例:

$ sleep 10 &
[1] 12654
$ ps -C sleep -o pid
12654
Run Code Online (Sandbox Code Playgroud)

使用shell

我不知道为什么你使用.sh脚本来运行你的代码而不是java直接调用,但是如果在任何情况下你使用&(背景)运算符,你可以pid使用$!变量来获取shell .

例如:

$ sleep 5 &
[1] 12395
$ echo $!
12395
Run Code Online (Sandbox Code Playgroud)

同样适用于该java -jar .. &命令,$!将设置为最后一个后台作业的pid.


Abd*_*aly 17

您可以使用awk获取pid:

ps -ef | grep MpiPageRank | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)

我注意到有时grep本身被发现,删除它:

ps -ef | grep MpiPageRank | grep -v grep | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)

  • -C只检查"java",如果你有多个java程序在运行,你需要检查特定java程序的PID.grep比-C ps更好. (2认同)

Jes*_*fon 12

jps与ps相同,只是它只查看java进程.

如果您需要PID,则可以执行以下操作:

jps | grep JAVA_NAME | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)

运行jps,然后使用grep来过滤你要杀死的java应用程序或jar.之后,awk捕获并将pid打印到控制台.


小智 6

A simple way is to run this:

pgrep java
Run Code Online (Sandbox Code Playgroud)