Убить зависший процесс от Scala - PullRequest
4 голосов
/ 21 апреля 2011

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

Чтобы запустить внешний процесс, я использую:

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 Ответ

3 голосов
/ 21 апреля 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...