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.

Author: jerico, 2012-11-29

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.

 1
Author: Dan Fitch, 2012-11-30 17:09:30

Avez-vous testé cela? J'ai couru:

START /B notepad.exe

Puis fermé en utilisant

TASKKILL /PID 123456
 0
Author: aphoria, 2012-11-29 19:03:09

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

 0
Author: jerico, 2012-12-05 01:25:30