2010-10-21 19 views
11

Digamos que tengo un proceso de ejecución actual conocido, ¿cómo puedo convertir esto en un objeto de proceso en Java? El proceso ya se está ejecutando, así que no quiero generar otro, solo quiero encapsularlo en un objeto de proceso que pueda usar dentro del código java. Algo a lo largo de las líneas de:Java: Obtenga un proceso dado un pid

int pid = getPid(); 
Process proc = magicGetProcess(pid); 

gracias

+0

No creo que Java tenga suficientes capacidades de administración de procesos incorporadas. Espero que alguien me demuestre que estoy equivocado. –

+0

¿Cuál de las funcionalidades de 'Proceso' más quieres? ¿Estás tratando de hacer un 'waitFor()', o estás buscando ser capaz de redirigir los flujos de entrada/salida a tu aplicación, o qué? Estoy bastante seguro de que lo que está pidiendo en sí mismo es imposible, pero podríamos ayudarlo con sus necesidades reales. –

+0

Bueno, necesito pasar este proceso a un método que prácticamente verifica si termina inesperadamente y toma el código de salida si lo hace. – Th3sandm4n

Respuesta

4

no creo que esto es posible utilizando sólo la biblioteca incorporada. AFAIK, ya no es trivial obtener el propio PID del proceso en ejecución (ver feature request y alternate mechanisms).

Un rápido vistazo a la java.lang.Process class muestra que se puede ir sobre cómo escribir su implementación personalizada de java.lang.Process utilizando JNI y código nativo. Su clase personalizada podría implementar métodos adicionales, como el de su pregunta.

+0

Hmm ya que es lo que parece. Oh bien. – Th3sandm4n

+0

FYI: url roto para java.lang.Process – Ismoh

0

En * nix, el código de salida de un proceso no secundario no es fácil, porque el código de salida simplemente desaparece junto con el proceso tan pronto como el proceso principal ha recogido el código de salida del niño. Puede adjuntar al proceso en ejecución utilizando alguna herramienta de seguimiento y recoger su código de salida cuando el proceso falle. La mayoría de los sistemas operativos * nix tienen herramientas de línea de comandos que te permitirán hacerlo (como strace en Linux, truss en SunOS) de una manera no intrusiva. Sin embargo, solo puede usarlos contra sus propios procesos o si ejecuta como root. Otra alternativa es configurar el subsistema de auditoría de su sistema operativo para registrar los códigos de salida de todos los procesos.

+0

En Unix, puede utilizar la función 'waitpid()' para captar el código de salida de un proceso que no sea secundario. El problema es llamarlo desde Java. –

0

No puede. Cada operación en proceso requiere que el proceso sea un proceso secundario. No es un proceso arbitrario.

0

¿qué ocurre con el uso de RMI? ¿Es posible pasar un objeto Proceso al Proceso que es? Probablemente no, porque Proceso no es serializable

Cuestiones relacionadas