Ответ 1
Вы можете завершить процесс в Future(blocking(_))
, и если он не вернется после тайм-аута, вы вызываете process.destroy()
.
Это то, что я сделал для моей небольшой библиотеки процессоров, например. см. здесь. Вместо использования !
, чтобы с нетерпением ждать кода exit, вы используете метод run
. Вот адаптация из README:
import scala.concurrent._
import ExecutionContext.Implicits.global
import scala.sys.process._
val p = "sleep 100".run() // start asynchronously
val f = Future(blocking(p.exitValue())) // wrap in Future
val res = try {
Await.result(f, duration.Duration(2, "sec"))
} catch {
case _: TimeoutException =>
println("TIMEOUT!")
p.destroy()
p.exitValue()
}