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.
Czy masz pozytywne ".destroy()" w wyniku SIGKILL? Dla moich procesów zewnętrznych wydaje się, że SIGTERM – Hamy
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ć: ( –
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