Tuer gracieusement un processus java (jetty/solr) démarré à partir d'un fichier batch Windows avec " start / b"
Je démarre un processus d'arrière-plan Java (Solr) à partir d'un fichier batch avec
start /b java -jar ...
Le problème est que start /b
protégera le processus des signaux SIGINT, voir help start
. Cela signifie que taskkill /pid ...
ne fonctionnera pas et taskkill /f /pid ...
tuera le processus sans le laisser exécuter d'abord les hooks d'arrêt.
Existe-t-il un autre moyen de démarrer le processus d'arrière-plan sous Windows à partir d'un .fichier bat sans ouvrir une fenêtre et sans le protéger de SIGINT? Ou existe-t-il une autre façon d'envoyer un signal à la machine virtuelle java afin que Solr s'arrête gracieusement lors de l'exécution à partir de start /b
?
J'aimerais utiliser un script batch normal plutôt que VBScript ou similaire si possible car c'est ce que la plupart de nos utilisateurs savent probablement le mieux.
3 answers
Je ne sais pas comment le faire dans un .fichier bat, mais avec Powershell, vous pouvez le faire:
Start-Process java -ArgumentList "-jar start.jar <args>" -WindowStyle Hidden
Ensuite, vous pouvez arrêter le processus normalement.
Exécuter get-help Start-Process -detailed
pour plus d'informations sur les options - vous pouvez également facilement exécuter le processus en tant qu'un autre utilisateur et d'autres choses que le vieux - start
ne vous laisse pas faire.
Avez-vous testé cela? J'ai couru:
START /B notepad.exe
Puis fermé en utilisant
TASKKILL /PID 123456
J'ai trouvé une solution de contournement pour mon cas spécifique (solr + jetty), voir http://alaminsumon.blogspot.com.br/2009/06/how-to-stop-and-start-jetty-server-from.html