2012-05-28 12 views
5

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.

+0

Sei positivo per '.destroy()' in SIGKILL? Per i miei processi esterni sembra risultare in SIGTERM – Hamy

+0

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 :( –

+0

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

risposta

3

Scala Process roba è basato su Java e, pertanto, soggetto agli stessi limiti. Java fornisce un'interfaccia molto povera. Forse rende possibile utilizzare la stessa interfaccia su più sistemi, ma è incredibilmente limitante per chi lavora sui sistemi Posix.

+0

Grazie, sembra che il codice dipendente dalla piattaforma sia necessario per il mio caso d'uso. –

Problemi correlati