Уничтожить зависающий процесс из Scala

#scala #process

#scala #процесс

Вопрос:

Мой код должен вызывать некоторые внешние программы, которые иногда зависают. (бесконечный цикл, никогда не вернется)

Для запуска внешнего процесса я использую:

 import tools.nsc.io.Process
val res = Process("ls")
res.foreach(println)
res.waitFor // waits until a Process is finished but if it's hanging waitFor will not return or
res.destroy // kills a process
  

Но я не нашел способа проверить, все еще ли процесс запущен. Или waitFor (время), чтобы я ждал только некоторое время.

Я считаю, что это должно быть простое решение, но я не могу его найти…

Ответ №1:

Насколько я могу видеть, метод exitValue в Process определяется следующим образом:

 def exitValue(): Option[Int] =
    catching(classOf[IllegalThreadStateException]) opt process.exitValue()
  

Таким образом, вы можете проверить, exitValue() возвращает None или Some значение. None означает, что процесс все еще запущен. Это следует из документации к Java Process.exitValue()