2010-06-30 4 views
16

Comment envoyer un signal POSIX à partir de la JVM? (en Java ou Clojure)Envoi d'un signal POSIX à partir de la JVM

Je n'aurais jamais pensé que ce serait un problème avant d'avoir essayé de le googler - il y a beaucoup d'informations sur traitant les signaux, mais rien sur leur envoi.

Si vous n'utilisez pas le JNI ou si vous appelez le shell pour exécuter "kill", existe-t-il un autre moyen d'envoyer un signal à un PID?

+0

voir aussi http://stackoverflow.com/questions/7835212/how-to-send-sigint-signal-from-java-to-an-external-process –

+0

En particulier ce commentaire: http: // stackoverflow. com/a/10115987/18187 – ddimitrov

Répondre

9

Ok. Répondre moi-même: J'ai regardé les bibliothèques suggérées, mais je me méfie de l'introduction de nouvelles dépendances sur beaucoup de code, surtout si je n'en utilise qu'une petite partie.

Il s'avère que la manière la plus simple est d'utiliser JNA et d'interagir avec l'API système (libc). En clojure ce montant à peu près à:

(jna-kill pid entier invoquent Signo)

après avoir fait un (: utilisation net.n01se.clojure-jna) bien sûr.

Étant donné que ce logiciel n'est pas destiné à fonctionner sur Windows, je suis d'accord avec cette solution qui devrait fonctionner sur tous les systèmes POSIX (MacOS et Linux sont ce qui m'intéresse).

5

Les signaux POSIX sont des fonctions spécifiques du système d'exploitation, mais la machine virtuelle Java est une machine virtuelle indépendante du système d'exploitation. Donc, il n'y a pas de fonctions standard pour cela.

Mais vous pouvez exécuter des commandes shell (en utilisant la classe Runtime) ou utiliser une lbrary pour vos besoins, comme un Posix for Java

+0

+1 Posix pour Java ressemble à l'option la plus propre (si vous pouvez déployer des bibliothèques JNI). Sinon, exec'ing 'kill' semble acceptable. – sleske

+0

Hmmm ... a regardé les docs 'Posix for Java', et certaines de ces classes ont le potentiel de déstabiliser votre JVM si elles sont utilisées avec négligence. –

Questions connexes