ho bisogno di scrivere un codice, cheJava:. Processo gestito da Runtime.getRuntime() Uccidi exec()
- run processo unix con
Runtime.getRuntime().exec("java -jar MyServerRunner -port MYPORT");
- trovare PID del processo attraverso il comando di esecuzione da Java codice
lsof -t -i: MYPORT
- e ucciderlo da pid
kill -9 PID
(anche con comando da codice Java in esecuzione) - e quindi eseguire altri comandi
MA
se eseguo questo comando Runtime.getRuntime().exec()
mio programma esce con codice di uscita 137 - questo significa che quando ho eseguito Runtime.getRuntime().exec("kill -9 PID")
uccido processo di mio java programma, ma non il programma, che ho eseguito dal codice.
Come posso eliminare SOLO il processo che eseguo dal codice?
P.S. forse dovrei usare ProcessBuilder?
Se si utilizza 'Runtime.getRuntime()' per eseguire un altro processo Java, si sta facendo qualcosa di sbagliato. Perché non puoi semplicemente eseguire la classe in un 'Thread'? –
1. E se stai uccidendo i processi con '-9' stai anche facendo qualcosa di sbagliato. Se il processo ha una porta, dovrebbe anche avere un comando di spegnimento che può essere inviato a quella porta. 'kill -9' è un'azione di ultima istanza per un amministratore che sa cosa sta facendo (e lo registra). Non dovrebbe essere integrato nelle applicazioni. 2. Il fatto che il processo Java avviato sia terminato con '137' non ha nulla a che fare con il fatto che stai uccidendo il processo sbagliato. – EJP