¿Cómo puedo enumerar todos los procesos de Java en bash? Necesito una línea de comando. Sé que hay un comando, ps
pero no sé qué parámetros necesito usar.
linux
bash
unix
command-line
Jacek Koralik
fuente
fuente
ps
a continuación, en primer lugar tratarman ps
,info ps
y aprender sobre él en Internet.Respuestas:
tratar:
y mira como te va
fuente
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,
fuente
es más útil. Imprime solo pid y nombre de clase principal calificado:
fuente
También puede usar un solo comando pgrep (no requiere que use tuberías y múltiples comandos):
fuente
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:
Más detalles sobre cómo utilizar
jcmd
.Ver también la
jcmd
utilidadfuente
jps
Para un mejor formato de salida, marque este comando:
fuente
Esto devolverá todos los procesos de Java en ejecución en el entorno Linux. Entonces puede matar el proceso usando el ID de proceso.
fuente
ps aux | grep java
o
$ ps -fea|grep -i java
fuente
Si quiero simplemente enumerar los procesos de Java, use:
fuente
fuente
grep
proceso?Lo anterior
(por cierto, este ejemplo no es el efectivo, pero es fácil de recordar);)
puede canalizar lo anterior a otros comandos, por ejemplo:
etc ...
fuente
Cuando quiero saber si una determinada clase de Java se está ejecutando, uso la siguiente línea de comando:
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.
fuente
$ top
simplemente da "java" como el comando que no es tan útil cuando se trata de averiguar qué proceso está acaparando la CPU.$ ps ww -fC java
proporciona las piezas faltantes del rompecabezas.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.
Los resultados se parecen a:
Una alternativa en Windows para enumerar todos los procesos es:
Pero eso necesitará un poco de análisis para hacerlo más legible.
fuente
Hay muchas formas de hacer esto. Puede utilizar
java.lang.ProcessBuilder
y "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/proc
directorio.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
fork
yjoin
procesos 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.fuente
Es mejor ya que solo le mostrará los procesos activos sin incluir este comando que también obtuvo una cadena java que
[]
hace el trucofuente
Yo uso esto (bueno en Debian 8):
alias psj='ps --no-headers -ww -C java -o pid,user,start_time,command'
fuente
Para conocer la lista de Java que se ejecuta en la máquina Linux. ps -e | grep java
fuente