我觉得用起来很酷 standard syntax 喜欢
import scala.sys.process._ val countLogger = ProcessLogger(line => {println ("out line: " + line)}, line => {println ("err line: " + line)}) val exitCode = ("cat prog.c" #&& "gcc prog.c -o prog -lm" #&& "echo running, this may hang" #&& "prog.exe") ! countLogger println("exitCode = " + exitCode)
然而,最后一个进程挂起。是否可以在超时时终止它?
您可以用 Future(blocking(_)) 如果超时后没有返回,您可以调用 process.destroy() .
Future(blocking(_))
process.destroy()
这就是我为我的孩子所做的 Processor library ,例如。 see here 。而不是使用 ! 要急切地等待退出代码,请使用 run 方法以下是自述文件的改编:
!
run
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() }