我目前正在使用scala進程API scala.sys.process
但我似乎無法弄清楚如何正常終止對SIGTERM信號作出反應的進程。我已經在python中做過了,前面有關於terminate
和send_signal
函數的漂亮過程,但是在scala scala.sys.process.Process
對象上,我看到的全部是destroy
。對我來說,看起來scala會將我的程序從軌道上摧毀,只是可以肯定的,那不是我想要的。如何正常終止從scala創建的進程
我該如何告訴這個過程,它應該清理自己並退出我的Scala代碼?
val launcher = Process("myprocess", Seq("args"))
val process = launcher.run()
process.destroy() //Err... no? terminate or equivalent like in python please?
編輯
更多的細節:我的斯卡拉進程正在啓動一個C++子,即聽信號處理(SIGTERM,SIGKILL等)知道什麼時候退出。它已經過很好的測試,它可以正確清潔自己。我的問題是我不知道如何從我的Scala應用程序發送信號!因此,我的C++過程總是被拖到外面,而不是被要求停止。
你是積極的'.destroy()'結果在SIGKILL?對我的外部進程來說,它似乎導致了SIGTERM – Hamy
那麼銷燬的javadoc(在scala基礎上)說:「殺死子進程。由這個Process對象表示的子進程被**強行終止**」(重點是我的)我知道的其他語言有兩種方法:殺死和終止(或指定信號的能力)。但是也許在內部,在某些平臺上,Java使用SIGTERM。沒有辦法可以肯定:(Linux上的 –
,我的進程肯定會得到SIGTERM(剛剛選中)。事實上,我找不到直接從Scala/Java發送SIGKILL的方法,我必須打開另一個子進程kill -9 :-(這是由http://stackoverflow.com/questions/10630303/java-process-destroy-source-code-for-linux確認 – Hamy