#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()