2011-04-21 4 views
4

Мой код должен вызывать некоторые внешние программы, которые иногда зависают. (Бесконечный цикл, никогда не вернется)Убейте висячий процесс от 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 (время), так что я жду только некоторое время.

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

ответ

3

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

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

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

Смежные вопросы