如何告诉Java运行这个Runtime.getRuntime().exec,而不必等待它必须运行的命令,只需在后端运行它?

7 java linux swing

如何让Runtime.getRuntime().exec(p)运行而不等待睡眠10 ?? 目前它是错的,它等待exec完成然后移动到下一个.我需要在运行中让exec运行,以便在10秒后它可以杀死PresentationInProjector.jpg.

Example:

   Runtime.getRuntime().exec("(sleep 10; echo '09|00|CC|01|83|88' | nc localhost 58888) &");
   PlayThisSlideShow("PresentationInProjector.jpg");
Run Code Online (Sandbox Code Playgroud)

Dav*_*amp 10

根据文件exec():

在单独的进程中执行指定的字符串命令.

所以任何调用exec()都不应该阻止,除非你waitFor()在返回的进程中使用了Runtime.

这是一个小例子(省略了异常处理):

Process p=Runtime.getRuntime().exec("cmd.exe /c ping 127.0.0.1 -n 10");

System.out.println("Here 1");//this will execute immediately

try {

    p.waitFor();

    System.out.println("Here 2");//this will only be seen after +- 10 seconds and process has finished

} catch (InterruptedException ex) {
   ex.printStackTrace(); 
}
Run Code Online (Sandbox Code Playgroud)

  • 在示例中有`p.waitFor();`.这就是等待子进程结束的东西. (3认同)
  • 您是否尝试过运行此代码?只要子进程正在运行,JVM仍将运行。exec()不会阻塞当前线程,并且您的代码与问题代码完全相同。 (2认同)

Pio*_*zda 5

exec()在生成的进程默认结束之前,不会使线程等待.您需要process.waitFor()显式调用以使当前进程等待.我想这PlayThisSlideShow("PresentationInProjector.jpg");是在之后立即调用的exec().您看到的是只要子进程正在运行,系统就会使JVM进程运行.我想没有办法轻易克服这个问题,让父进程在子进程仍在运行时被终止.

你为什么不能用Java杀死演示投影仪?