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.

Author: jerico, 2012-11-29

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.

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

L'hai testato? Ho corso:

START /B notepad.exe

E poi chiuso con

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

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

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