tutorial - Encuentra el pid de un proceso java bajo Linux
para que se usa elastic search (3)
Hola, estoy usando la biblioteca MPJ en el programa Java para el algoritmo Pagerank. Lo compilo por
javac -cp .:$MPJ_HOME/lib/mpj.jar MpiPageRank.java
y dirigido por
mpjrun.sh -np 2 MpiPageRank
donde -np
es el número de proceso
Ahora tengo que encontrar su pid
ps -ef|grep java
me gusta
mpjrun.sh -np 2 MpiPageRank & sleep 2
ps -ef | grep java
yo obtengo
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
Ahora quiero extraer MpiPageRank
de solo 1 linux comman para obtener su pid ie 27866
. Cómo puedo hacer eso ?
usando ps
ps
permite al usuario definir su propio formato para su salida con el -o
, y -C
para seleccionar entradas mediante el comando dado. Yo iría con:
ps -C java -o pid
de la página 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.
Uno puede obtener resultados más precisos al especificar más restricciones (es decir, el usuario bajo el cual se ejecuta el proceso, etc.). Mire la página man para más información y otros switches.
ejemplo:
$ sleep 10 &
[1] 12654
$ ps -C sleep -o pid
12654
usando el caparazón
No sé por qué usas un script .sh
para ejecutar tu código y no llamas directamente a java
, pero si en cualquier caso usas el operador &
(fondo), puedes agarrar el pid
través de tu caparazón, ¡con $!
variable.
por ejemplo:
$ sleep 5 &
[1] 12395
$ echo $!
12395
lo mismo ocurre con el java -jar .. &
, $!
se establecerá en el pid del último trabajo de fondo.
Puedes usar awk para obtener el pid:
ps -ef | grep MpiPageRank | awk ''{print $2}''
Noté que a veces grep se encuentra, para eliminarlo:
ps -ef | grep MpiPageRank | grep -v grep | awk ''{print $2}''
jps es lo mismo que ps excepto que solo mira los procesos java.
Si luego necesita el PID, puede hacer algo como lo siguiente:
jps | grep JAVA_NAME | awk ''{print $1}''
Eso corre jps, luego usa grep para filtrar por la aplicación java o jar que quieras matar. Después de eso, awk captura e imprime solo el pid en la consola.