La bonne façon de tuer un processus en Java
Quelle est la meilleure façon de tuer un processus en Java ?
Obtenir le PID et ensuite de le tuer avec Runtime.exec()
?
Utilisation destroyForcibly()
?
Quelle est la différence entre ces deux méthodes, et est-il d'autres solutions ?
Est-ce votre propre processus ou d'un autre processus?
est-ce un processus java ou tout autre processus ?
C'était pour une externe non-processus Java, mais merci pour la fois moyen Shitsu
est-ce un processus java ou tout autre processus ?
C'était pour une externe non-processus Java, mais merci pour la fois moyen Shitsu
OriginalL'auteur Kariamoss | 2016-02-05
Vous devez vous connecter pour publier un commentaire.
Si le processus que vous voulez tuer a été lancé par votre application
Alors vous avez probablement une référence (
ProcessBuilder.start()
ouRuntime.exec()
à la fois renvoyer une référence). Dans ce cas, vous pouvez simplement appelerp.destroy()
. Je pense que c'est la façon la plus propre (mais attention: le sous-processus a commencé parp
peut rester en vie, de vérifier http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4770092 pour plus d'info).La
destroyForcibly
doit être utilisé uniquement sidestroy()
a échoué après un certain délai d'attente. En un motdestroy()
destroyForcibly()
si le processus estencore en vie
Si le processus que vous voulez tuer est externe
Alors vous n'avez pas beaucoup de choix: vous devez passer par le système d'exploitation de l'API (
Runtime.exec
). Sur Windows, le programme d'appel serataskkill.exe
, alors que sur Mac et Linux, vous pouvez essayerkill
.Ont un coup d'oeil à https://github.com/zeroturnaround/zt-exec/issues/19 et Le meurtre d'un processus à l'aide de Java et http://invisiblecomputer.wonderhowto.com/how-to/code-simple-java-app-kill-any-process-after-specified-time-0133513/ pour plus d'info.
OriginalL'auteur Derlin
Si vous êtes en essayant de tuer le processus principal de votre code java commencé, je suggérerais à l'aide de
System.exit()
. Les avantages sont expliqués ici: quand faut-il appeler le système de sortie en java.Essentiellement,
System.exit()
va courir d'arrêt crochets qui fera en sorte que toute personne à charge non-démon des processus qui n'ont pas terminé leurs travaux sont tués avant que votre processus est tué. C'est le propre façon de le faire.Si le processus n'est pas le vôtre, vous devrez compter sur le Système d'Exploitation pour effectuer ce travail pour vous, comme expliqué dans cette réponse: Le meurtre d'un Processus à l'Aide de Java
Dans ce cas, votre suggestion de
Runtime.exec()
un kill sur *nix serait une manière décente pour aller.Maintenant, comme pour
destroyForcibly()
, vous êtes généralement appel à un processus enfant engendré par votre code java qui a sans doute commencé avec le processus de l'api deProcessBuilder.start()
ouRuntime.exec()
OriginalL'auteur nlloyd
le seul qui a fonctionné pour moi est le Système.exit(0);
c'est un travail bien parce qu'il ferme encore tous les processus en cours d'exécution et les composants
OriginalL'auteur Meir Bookatz
dans java 8 code source
merci pour vos conseils,je suis désolé pour mon anglais.
Je veux juste dire que le destroyForcibly est égale à la détruire en Java 8
Ainsi, vous devriez essayer de tuer le processus par pid si le processus est encore en vie après avoir appelé
destroy
méthodeVous pouvez obtenir pid facilement si vous êtes sur l'île de java 9+,il suffit d'appeler
Process.pid()
méthodeAlors que cet extrait de code, peut-être de résoudre la question, y compris une explication aide vraiment à améliorer la qualité de votre post. Rappelez-vous que vous répondez à la question pour les lecteurs dans l'avenir, et ces personnes pourraient ne pas connaître les raisons de votre code suggestion.
OriginalL'auteur 钱宇豪