2012-05-28 11 views
5

Actualmente estoy usando el proceso de scala API scala.sys.process pero, parece que no puedo averiguar cómo con gracia finaliza un proceso que reacciona a la señal SIGTERM. Lo he hecho en python antes de que haya una bonita función terminate y send_signal en el proceso, pero en el objeto scala scala.sys.process.Process, todo lo que veo es destroy. Para mí, parece que Scala desarticulará mi proceso desde la órbita, solo para estar seguro, y eso no es lo que quiero.Cómo finalizar correctamente un proceso creado desde scala

¿Cómo puedo decirle a este proceso que debe limpiarse y salir de mi código scala?

val launcher = Process("myprocess", Seq("args")) 
val process = launcher.run() 
process.destroy() //Err... no? terminate or equivalent like in python please? 

EDITAR

Para más detalles: Mi proceso Scala es el lanzamiento de un subproceso C++, que escuche la señal manejador (SIGTERM, SIGKILL y similares) para saber cuándo salir. Se ha probado bien y se limpia correctamente. ¡Mi problema es que no sé cómo enviar esa señal desde mi aplicación scala! Por lo tanto, mi proceso de C++ siempre se arrastra hacia afuera y se dispara en lugar de simplemente pedir que se detenga.

+0

¿Está positivo '.destroy()' resultados en SIGKILL? Para mis procesos externos, parece dar como resultado SIGTERM – Hamy

+0

Bueno, los javadocs de destroy (en los que se basa Scala) dice: "Mata el subproceso. El subproceso representado por este objeto de proceso ** termina por la fuerza **" (énfasis mío) otro idioma que conozco tiene dos métodos: matar y terminar (o la capacidad de especificar la señal). Pero quizás internamente, en alguna plataforma, Java use SIGTERM. No hay forma de estar seguro :( –

+0

en Linux, mis procesos definitivamente obtienen SIGTERM (simplemente comprobado). De hecho, no puedo encontrar una manera de enviar un SIGKILL directamente desde Scala/Java, tengo que abrir otro subproceso y kill -9 :-(Esto es corroborado por http://stackoverflow.com/questions/10630303/java-process-destroy-source-code-for-linux – Hamy

Respuesta

3

Scala Process cosas se basa en Java, y, por lo tanto, sujeto a las mismas limitaciones. Java proporciona una interfaz muy pobre. Tal vez hace posible usar la misma interfaz en más sistemas, pero es increíblemente limitado para quienes trabajan en sistemas Posix.

+0

Gracias, parece que el código dependiente de la plataforma será necesario para mi caso de uso. –

Cuestiones relacionadas