2010-06-30 13 views
16

¿Cómo envío una señal POSIX desde la JVM? (en Java o Clojure)Enviar una señal POSIX desde la JVM

Nunca pensé que esto sería un problema hasta que traté de buscar en Google: hay mucha información sobre que maneja las señales, pero nada sobre cómo enviarlas.

Si no se usa el JNI o ​​no se llama al shell para ejecutar "kill", ¿hay alguna otra manera de enviar una señal a un PID?

+0

ver también http://stackoverflow.com/questions/7835212/how-to-send-sigint-signal-from-java-to-an-external-process –

+0

En particular, este comentario: http: // stackoverflow. com/a/10115987/18187 – ddimitrov

Respuesta

9

Ok. Respondiendo a mí mismo: miré las bibliotecas sugeridas, pero soy cauteloso de introducir nuevas dependencias en muchos códigos, especialmente si solo usaré una pequeña parte de él.

Resulta que la manera más fácil es usar JNA e interfaz con la API del sistema (libc). En este clojure más o menos equivale a:

(JNA-invocan Entero matar signo pid)

después de hacer una (: uso net.n01se.clojure-JNA), por supuesto.

Como este software no está destinado a ejecutarse en Windows, estoy de acuerdo con esta solución que debería funcionar en todos los sistemas POSIX (lo que más me interesa es MacOS y Linux).

5

Las señales POSIX son funciones específicas del sistema operativo, pero se intenta que JVM sea una máquina virtual independiente del sistema operativo. Entonces no hay funciones estándar para esto.

Pero puede ejecutar comandos shell (usando Runtime clase) o utilizar algún lbrary para sus necesidades, como un Posix for Java

+0

+1 Posix para Java parece la opción más limpia (si puede implementar bibliotecas JNI). De lo contrario, ejecutar 'matar' parece aceptable. – sleske

+0

Hmmm ... examinó los documentos 'Posix for Java', y algunas de esas clases tienen el potencial de desestabilizar su JVM si se usan descuidadamente. –

Cuestiones relacionadas