Uccidere con grazia un processo java (jetty/solr) avviato da un file batch di Windows con " start / b"
Sto avviando un Java background process (Solr) da un file batch con
start /b java -jar ...
Il problema è che start /b
proteggerà il processo dai segnali SIGINT, vedi help start
. Ciò significa che taskkill /pid ...
non funzionerà e taskkill /f /pid ...
ucciderà il processo senza lasciarlo eseguire prima i ganci di arresto.
Esiste un altro modo per avviare il processo in background su Windows da a .file bat senza aprire una finestra e senza proteggerlo da SIGINT? O c'è un altro modo di inviare un segnale alla VM java in modo che Solr si spenga con grazia durante l'esecuzione da start /b
?
Mi piacerebbe usare un normale script batch piuttosto che VBScript o simile, se possibile, poiché questo è ciò che la maggior parte dei nostri utenti probabilmente conosce meglio.
3 answers
Non so come farlo in un .file bat, ma con Powershell puoi fare questo:
Start-Process java -ArgumentList "-jar start.jar <args>" -WindowStyle Hidden
Quindi è possibile interrompere il processo normalmente.
Esegui get-help Start-Process -detailed
per maggiori informazioni sulle opzioni, puoi anche eseguire facilmente il processo come utente diverso e altre cose che il vecchio start
non ti consente di fare.
L'hai testato? Ho corso:
START /B notepad.exe
E poi chiuso con
TASKKILL /PID 123456
Ho trovato una soluzione per il mio caso specifico (solr + jetty), vedi http://alaminsumon.blogspot.com.br/2009/06/how-to-stop-and-start-jetty-server-from.html