Lista de procesos Java


113

¿Cómo puedo enumerar todos los procesos de Java en bash? Necesito una línea de comando. Sé que hay un comando, pspero no sé qué parámetros necesito usar.


1
Por favor, muestre un poco más de esfuerzo para investigar esto y describir su problema, hay muchas posibilidades dependiendo de lo que esté buscando exactamente.
Mat

3
Si usted sabe que hay psa continuación, en primer lugar tratar man ps, info psy aprender sobre él en Internet.
ssapkota

Respuestas:


148

tratar:

ps aux | grep java

y mira como te va


109

Java reciente viene con Java Virtual Machine Process Status Tool "jps"

http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/jps.html

Por ejemplo,

[nsushkin@fulton support]$ jps -m
2120 Main --userdir /home/nsushkin/.netbeans/7.0 --branding nb
26546 charles.jar
17600 Jps -m

2
Solo una nota: jps solo se envía con el JDK, no con el JRE. Las máquinas con tiempos de ejecución de Java simples no tendrán esta herramienta.
aguazales

¿Cómo puedo obtener solo el recuento de ejecutar el proceso java?
Jet

50
jps -lV

es más útil. Imprime solo pid y nombre de clase principal calificado:

2472 com.intellij.idea.Main
11111 sun.tools.jps.Jps
9030 play.server.Server
2752 org.jetbrains.idea.maven.server.RemoteMavenServer

31

También puede usar un solo comando pgrep (no requiere que use tuberías y múltiples comandos):

pgrep -fl java

27

A partir de Java 7 , la forma más sencilla y menos propensa a errores es simplemente usar el comando jcmd que es parte del JDK de manera que funcione de la misma manera en todos los sistemas operativos.

Ejemplo:

> jcmd
5485 sun.tools.jcmd.JCmd
2125 MyProgram

jcmd permite enviar solicitudes de comandos de diagnóstico a una máquina virtual Java (JVM) en ejecución.

Más detalles sobre cómo utilizarjcmd .

Ver también la jcmdutilidad


1
Vaya, eso es incluso mejor quejps
Sridhar Sarnobat

15

Para un mejor formato de salida, marque este comando:

ps -fC java

Agradable una salida limpia; Exactamente lo que estaba buscando. ¡Gracias!
Charles Naccio

12

Esto devolverá todos los procesos de Java en ejecución en el entorno Linux. Entonces puede matar el proceso usando el ID de proceso.

ps -e|grep java


6

Si quiero simplemente enumerar los procesos de Java, use:

ps -A | grep java

5
pgrep -l java
ps -ef | grep java

5
Gracias por este fragmento de código, que puede proporcionar ayuda inmediata. Una explicación adecuada mejoraría enormemente su valor educativo al mostrar por qué es una buena solución al problema y lo haría más útil para futuros lectores con preguntas similares, pero no idénticas. Por favor, editar su respuesta para agregar explicación y dar una indicación de lo que se aplican limitaciones y supuestos. En particular, ¿por qué el segundo de ellos no muestra el grepproceso?
Toby Speight

4
ps axuwww | grep java | grep -v grep

Lo anterior

  • mostrarle todos los procesos con líneas largas (arg: www)
  • filtrar (grep) solo las líneas que contienen la palabra java, y
  • filtrar la línea "grep java" :)

(por cierto, este ejemplo no es el efectivo, pero es fácil de recordar);)

puede canalizar lo anterior a otros comandos, por ejemplo:

ps axuwww | grep java | grep -v grep | sed '.....'  | while read something
do
    something_another $something
done

etc ...


3

Cuando quiero saber si una determinada clase de Java se está ejecutando, uso la siguiente línea de comando:

ps ww -f -C java | grep "fully.qualified.name.of.class"

Desde la vista lateral del sistema operativo, el nombre del comando del proceso es "java". La opción "ww" amplía el máximo de caracteres de la columna, por lo que es posible grep del FQN de la clase relacionada.


Esto es lo que estaba buscando - $ topsimplemente da "java" como el comando que no es tan útil cuando se trata de averiguar qué proceso está acaparando la CPU. $ ps ww -fC javaproporciona las piezas faltantes del rompecabezas.
David Clarke

2

jps & jcmd no me mostraba ningún resultado cuando lo probé usando openjdk-1.8 en redhat linux. Pero incluso si lo hiciera, solo muestra procesos bajo el usuario actual que no funciona en mi caso. Usar ps | grep es lo que terminé haciendo, pero la ruta de clases para algunas aplicaciones Java puede ser extremadamente larga, lo que hace que los resultados sean ilegibles, así que usé sed para eliminarlo. Esto es un poco difícil todavía, pero elimina todo excepto: PID, Usuario, clase java / jar, args.

ps -o pid,user,cmd -C java | sed -e 's/\([0-9]\+ *[^ ]*\) *[^ ]* *\([^$]*\)/\1 \2/' -e 's/-c[^ ]* [^ ]* \|-[^ ]* //g'

Los resultados se parecen a:

  PID USER     CMD
11251 userb org.apache.zookeeper.server.quorum.QuorumPeerMain ../config/zookeeper.properties
19574 userb com.intellij.idea.Main
28807 root org.apache.nifi.bootstrap.RunNiFi run
28829 root org.apache.nifi.NiFi

Una alternativa en Windows para enumerar todos los procesos es:

WMIC path win32_process where "Caption='java.exe'" get ProcessId,Commandline

Pero eso necesitará un poco de análisis para hacerlo más legible.


1

Hay muchas formas de hacer esto. Puede utilizar java.lang.ProcessBuildery "pgrep" para obtener el identificador de proceso (PID) con algo como: pgrep -fl java | awk {'print $1'}. O, si está ejecutando en Linux, puede consultar el /procdirectorio.

Lo sé, esto parece horrible y no portátil, e incluso mal implementado, estoy de acuerdo. Pero debido a que Java realmente se ejecuta en una máquina virtual, por alguna razón absurda que realmente no puedo entender después de más de 15 años trabajando en el JDK, es por qué no es posible ver cosas fuera del espacio JVM, es realmente ridículo para ti. Piénsalo. Puede hacer todo lo demás, incluso forky joinprocesos secundarios (aquellos eran una manera horrible de la multitarea cuando el mundo no sabía nada de las discusiones o pthreads , lo que es un infierno! ¿Qué está pasando en un sobre con Java ?! :).

Esto dará una discusión inmensa, lo sé, pero de todos modos, hay una API muy buena que ya utilicé en mis proyectos y es lo suficientemente estable ( es OSS, por lo que aún necesita probar cada versión que usa antes de confiar realmente en la API ): https : //github.com/jezhumble/javasysmon

JavaDoc: http://jezhumble.github.io/javasysmon/ , busque la clase com.jezhumble.javasysmon.OsProcess, ella hará el truco. Espero que haya ayudado, mucha suerte.


1
 ps -eaf | grep [j]ava

Es mejor ya que solo le mostrará los procesos activos sin incluir este comando que también obtuvo una cadena java que []hace el truco


debería ser ps -eaf | grep Java no [j] ava
vaquar khan

@vaquarkhan dude solo intente ejecutar sus sugerencias y las mías y vea cuál es la diferencia, ambas funcionarán
Ilya Gazman

Ambos dan los mismos resultados, sin embargo [j] ava es confuso
vaquar khan

0

Yo uso esto (bueno en Debian 8): alias psj='ps --no-headers -ww -C java -o pid,user,start_time,command'


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.