Attualmente sto usando l'API Scala scala.sys.process
ma, io non riesco a capire come grazia terminare un processo che reagiscono al segnale SIGTERM. L'ho fatto in Python prima di dove ci sono abbastanza terminate
e send_signal
funzione sul processo, ma sull'oggetto scala scala.sys.process.Process
, tutto quello che vedo è destroy
. A me sembra che scala muterà il mio processo dall'orbita, tanto per essere sicuro, e non è quello che voglio.Come per terminare con grazia un processo creato da Scala
Come posso dire a questo processo che dovrebbe pulirsi da solo e uscire dal mio codice scala?
val launcher = Process("myprocess", Seq("args"))
val process = launcher.run()
process.destroy() //Err... no? terminate or equivalent like in python please?
EDIT
Per maggiori dettagli: Il mio processo scala lancia un sottoprocesso C++, che ascoltano per segnalare handler (SIGTERM, SIGKILL e simili) per sapere quando uscire. È stato ben testato e si pulisce correttamente. Il mio problema è che non so come inviare quel segnale dalla mia scala! In questo modo, il mio processo C++ viene sempre trascinato all'esterno e sparato invece di essere chiamato a fermarsi.
Sei positivo per '.destroy()' in SIGKILL? Per i miei processi esterni sembra risultare in SIGTERM – Hamy
Bene, i javadocs di destroy (su cui scala è basato) dice: "Elimina il sottoprocesso. Il sottoprocesso rappresentato da questo oggetto Process è ** forzatamente terminato **" (enfasi il mio) Most altre lingue che conosco hanno due metodi: uccidere e terminare (o la possibilità di specificare il segnale). Ma forse internamente, su qualche piattaforma, Java usa SIGTERM. Non c'è modo di esserne sicuri :( –
su Linux, i miei processi sicuramente ottengono SIGTERM (appena controllato) .In realtà, non riesco a trovare un modo per inviare direttamente un SIGKILL da Scala/Java, devo aprire un altro sottoprocesso e kill -9 :-(Ciò è confermato da http://stackoverflow.com/questions/10630303/java-process-destroy-source-code-for-linux – Hamy