Comment puis-je tuer un processus Linux en Java avec SIGKILL Process.destroy () fait SIGTERM
Sous Linux quand je lance le détruire fonction de java.lang.Les objets de processus (ce Qui est vrai tapé java.lang.UNIXProcess ), il envoie un signal SIGTERM à traiter, est-il un moyen de le tuer avec SIGKILL?
source d'informationauteur ekeren
Vous devez vous connecter pour publier un commentaire.
Pas à l'aide de Java pur.
Votre plus simple solution consiste à utiliser des
Runtime.exec()
pour exécuter unkill -9 <pid>
de commande comme un processus externe.Malheureusement, il n'est pas si simple de trouver le PID. Vous devrez soit utiliser la réflexion en noir de la magie pour accéder à la
private int pid
champ, ou le désordre autour de la sortie de l'ps
commande.Mise à JOUR - en fait, il existe une autre manière. Créer un petit utilitaire (programme C, shell script, peu importe) qui va lancer le réel de l'application externe. Code de l'utilitaire de sorte qu'il se souvient de le PID du processus fils, et met en place un gestionnaire de signal SIGTERM pour qui SIGKILL le processus de l'enfant.
Stephen sa réponse est correcte. J'ai écrit ce qu'il a dit:
Vous pouvez également obtenir le pid de cette façon:
Si vous connaissez le nom du processus que vous pouvez utiliser
pkill
Depuis Java 1.8
vous pouvez appeler la méthode
destroyForcibly()
qui appelle à ladestroy()
méthode par défaut, mais selon la Java docs, tous les sous-processus renvoyé parProcessBuilder
ouRuntime.exec()
mettre en œuvre cette méthode.