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.
¿Está positivo '.destroy()' resultados en SIGKILL? Para mis procesos externos, parece dar como resultado SIGTERM – Hamy
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 :( –
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