プログラムを通過したイメージファイルが破損している、または名前が間違っている場合、無期限に実行されるコマンドラインからプログラムを実行しようとしています。私は、ファイル名が有効であることを確認するためにテストすることができますが、ルートキットがイメージを壊した場合、それは私を助けません。私の理解は、プログラムを終了する唯一の方法は、別のスレッドを作成することですが、実行が完了するまでsys.process.!!
ブロックします。あなたは、その完了までProcess
ブロックを聞かせする必要はありませんプログラムの実行時間が長すぎる場合、Scalaでコマンドライン引数の実行を停止するにはどうすればよいですか?
import scala.concurrent.ExecutionContext.Implicits.global
val sb = new StringBuffer // sb for capture output
val io = BasicIO(false, sb, None)// Creates a `ProcessIO` that appends its output to a `StringBuffer`
val p = s"python vol.py -f $memFile imageinfo".run()
val f = Future {
p.exitValue() //Blocks until this process exits and returns the exit code.
Some(sb.toString)// return the process result
}
try {
val str: Option[String] = Await.result(f, Duration.apply(1, TimeUnit.SECONDS))
} catch {
case e: TimeoutException => {
println("run too long")
p.destroy() //destroy this process when too long
}
}
この場合、タイムアウトはプロセスの実行を停止するとは思われません。 – pedrofurla
@pedrofurla良いコール、はい、プロセスはまだ実行されます、私はタイムアウト後にプロセスを破壊することができると思います。 'ProcessIO'を使用して出力をキャプチャします。私はこれを更新します。 – chengpohi