2012-05-28 9 views
5

Obecnie używam API procesu scala scala.sys.process, ale nie mogę się domyślić, jakwdzięcznie wygasić proces, który reaguje na sygnał SIGTERM. Zrobiłem to w pythonie, zanim pojawiły się ładne funkcje terminate i send_signal, ale na obiekcie scala scala.sys.process.Process widzę tylko destroy. Dla mnie wygląda na to, że scala wyrzuci mój proces z orbity, żeby się upewnić, i nie tego chcę.Jak z wdziękiem zakończyć proces utworzony ze scala

Jak mogę powiedzieć temu procesowi, że powinien się oczyścić i wyjść z mojego kodu scala?

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

EDIT

Więcej szczegółów: My proces scala rozpoczyna C++ podproces, że słuchać sygnał obsługi (SIGTERM, SIGKILL i tym podobne), aby wiedzieć, kiedy wyjść. Został dobrze przetestowany i prawidłowo się oczyszcza. Mój problem polega na tym, że nie wiem jak wysłać ten sygnał z mojej aplikacji scala! W ten sposób mój proces C++ zawsze zostaje przeciągnięty na zewnątrz i zastrzelony, a nie tylko poproszony o zatrzymanie.

+0

Czy masz pozytywne ".destroy()" w wyniku SIGKILL? Dla moich procesów zewnętrznych wydaje się, że SIGTERM – Hamy

+0

No cóż javadocs niszczenia (na którym opiera się scala) mówi: "Zabija podproces." Podproces reprezentowany przez ten obiekt procesu jest ** wymuszony na końcu ** "(nacisk mój) inny język, jaki znam, ma dwie metody: zabij i zakończ (lub możliwość określenia sygnału). Ale może wewnętrznie, na niektórych platformach, Java używa SIGTERM. Nie ma sposobu, aby się upewnić: ( –

+0

na Linuksie, moje procesy zdecydowanie otrzymują SIGTERM (po prostu zaznaczone) W rzeczywistości, nie mogę znaleźć sposobu na wysłanie SIGKILLa bezpośrednio ze Scala/Java, muszę otworzyć kolejny podproces i kill -9 :-(Potwierdza to http://stackoverflow.com/questions/10630303/java-process-destroy-source-code-for-linux – Hamy

Odpowiedz

3

Scala Process rzeczy są oparte na Javie, a zatem podlegają tym samym ograniczeniom. Java zapewnia bardzo słaby interfejs. Być może umożliwia to użycie tego samego interfejsu na większej liczbie systemów, ale jest to niewiarygodnie ograniczone do tych pracujących na systemach Posix.

+0

Dzięki, wydaje się, że kod zależny od platformy będzie konieczny dla mojego przypadku użycia. –

Powiązane problemy