2012-05-28 54 views
5

我目前正在使用scala進程API scala.sys.process但我似乎無法弄清楚如何正常終止對SIGTERM信號作出反應的進程。我已經在python中做過了,前面有關於terminatesend_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++過程總是被拖到外面,而不是被要求停止。

+0

你是積極的'.destroy()'結果在SIGKILL?對我的外部進程來說,它似乎導致了SIGTERM – Hamy

+0

那麼銷燬的javadoc(在scala基礎上)說:「殺死子進程。由這個Process對象表示的子進程被**強行終止**」(重點是我的)我知道的其他語言有兩種方法:殺死和終止(或指定信號的能力)。但是也許在內部,在某些平臺上,Java使用SIGTERM。沒有辦法可以肯定:(Linux上的 –

+0

,我的進程肯定會得到SIGTERM(剛剛選中)。事實上,我找不到直接從Scala/Java發送SIGKILL的方法,我必須打開另一個子進程kill -9 :-(這是由http://stackoverflow.com/questions/10630303/java-process-destroy-source-code-for-linux確認 – Hamy

回答

3

Scala Process東西是基於Java的,因此受到相同的限制。 Java提供了非常差的界面。也許它可以在更多的系統上使用相同的界面,但對於那些在Posix系統上工作的人來說,這是非常有限的。

+0

謝謝,它似乎是平臺相關的代碼將是我的用例所必需的。 –