Este es otro enfoque para analizar la lista de procesos desde el comando " ps -e ":
try {
String line;
Process p = Runtime.getRuntime().exec("ps -e");
BufferedReader input =
new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line); //<-- Parse data here.
}
input.close();
} catch (Exception err) {
err.printStackTrace();
}
Si está utilizando Windows, debe cambiar la línea: "Process p = Runtime.getRun ..." etc ... (tercera línea), por una que se vea así:
Process p = Runtime.getRuntime().exec
(System.getenv("windir") +"\\system32\\"+"tasklist.exe");
¡Espero que la información ayude!
tasklist.exe /fo csv /nh
para obtener la lista en formato CSV, es mucho más fácil de analizar.ps -elf | grep java
, no devolverá nada, perops -elf
funcionaría como se esperaba.(.exec (Runtime/getRuntime) "tasklist"))
(en Clojure, usando Java-interop) devuelve correctamente eltasklist
proceso, incluso sin especificar un directorio.Finalmente, con Java 9+ es posible con
ProcessHandle
:Salida:
fuente
java.lang
por lo que no es necesario importarEn Windows hay una alternativa que usa JNA :
fuente
GetModuleFileName
. Consulte stackoverflow.com/questions/7521693/… para ver un ejemplo.WMIC PROCESS
o para restringir la salida para un proceso específico:WMIC PROCESS WHERE name='theName'
. Puede utilizar más filtros para limitar la salida si es necesario. La línea de comando se incluye en la columna CommandLine de la tabla devuelta (= segunda columna)La única forma en que puedo pensar en hacerlo es invocando una aplicación de línea de comandos que hace el trabajo por usted y luego escaneando la salida (como ps de Linux y la lista de tareas de Windows).
Desafortunadamente, eso significará que tendrá que escribir algunas rutinas de análisis para leer los datos de ambos.
fuente
tasklist
programa se puede configurar para generar CSV :)YAJSW (Yet Another Java Service Wrapper) parece que tiene implementaciones basadas en JNA de su interfaz org.rzo.yajsw.os.TaskList para win32, linux, bsd y solaris y tiene una licencia LGPL. No he intentado llamar a este código directamente, pero YAJSW funciona muy bien cuando lo he usado en el pasado, por lo que no debería tener demasiadas preocupaciones.
fuente
Puede recuperar fácilmente la lista de procesos en ejecución utilizando jProcesses
fuente
No hay una forma neutral de plataforma de hacer esto. En la versión 1.6 de Java, se agregó una clase " Escritorio " que permite formas portátiles de navegar, editar, enviar, abrir e imprimir URI. Es posible que esta clase algún día se amplíe para apoyar procesos, pero lo dudo.
Si solo tiene curiosidad por los procesos de Java, puede utilizar la api java.lang.management para obtener información de hebras / memoria en la JVM.
fuente
Para Windows utilizo lo siguiente:
fuente
Esto podría ser útil para aplicaciones con un JRE incluido: busco el nombre de la carpeta desde la que estoy ejecutando la aplicación: así que si su aplicación se está ejecutando desde:
luego puede encontrar si ya se está ejecutando en J9, por:
fuente
Usar código para analizar
ps aux
para Linux ytasklist
Windows son sus mejores opciones, hasta que aparezca algo más general.Para Windows, puede hacer referencia a: http://www.rgagnon.com/javadetails/java-0593.html
Tubo de lata Linux los resultados de
ps aux
a travésgrep
demasiado, lo que haría procesamiento / búsqueda rápida y fácil. Estoy seguro de que también puedes encontrar algo similar para Windows.fuente
El siguiente programa será compatible solo con la versión de Java 9+ ...
Para obtener la información de CurrentProcess,
Para todos los procesos en ejecución,
fuente
Tenemos que usarlo, de lo
process.getOutputStream.close()
contrario se bloqueará en el bucle while.fuente
fuente
Este es mi código para una función que obtiene las tareas y obtiene sus nombres, y también las agrega a una lista para acceder desde una lista. Crea archivos temporales con los datos, lee los archivos y obtiene el nombre de la tarea con el sufijo .exe, y organiza los archivos para eliminarlos cuando el programa ha salido con System.exit (0), también oculta los procesos que se utilizan para obtenga las tareas y también java.exe para que el usuario no pueda matar accidentalmente el proceso que ejecuta el programa todos juntos.
fuente