java 不等待 unix 二进制文件完成执行

java not waiting for unix binary to complete execution

我正在为 运行 一个 unix 二进制应用程序创建一个 javafx 应用程序,它限制了一个进程可以使用的 cpu 百分比,这里我已经有一个 cputhrottle unix 二进制文件接收 PID 和 CPU 百分比作为参数,我的应用程序只是充当此 unix 二进制文件的 GUI。

当我 运行 这个 cpu 从终端节流时,它会一直保持 运行ning,直到我按下 - CTRL+C(这是正常行为)。

但问题是,当我 运行 这个 unix 二进制文件和我的 java 代码时,似乎程序几乎立即终止(而它应该是 运行 ning,直到我按下停止按钮),并且因为它没有 运行ning 并被终止,我的程序无法控制进程获得 CPU 的百分比。

这是我的代码:http://pastebin.com/rbG3ctfH

所以,有没有办法告诉 java 保持 运行 关闭 cputhrottle 二进制文件,而不是关闭它。

我尝试替换第 56 行,而是编写代码来执行一个脚本,该脚本将创建一个文件,其中包含一些文本内容,&当他执行程序时,它确实创建了一个文件,所以它的工作,但是当我在 catch 块中添加 e1.printStackTrace 时,它由于某种原因停止工作。

而且,如果我在 shell 脚本中添加 sleep,则它不会正确执行,而且不会生成任何异常。

您尝试 运行 ("echo dkkdk|sudo....) 的命令是 shell 命令。您需要告诉 runtime.exec() 到 运行'bash -c echo dkkdk|sudo..'

还要注意 runtime.exec 是异步的,could/might/likely 会在子进程完成之前 return 到您的程序。

此外,我无法像您尝试的那样将超级用户密码通过管道传递给 sudo。并不是说它对你不起作用只是因为我无法让我的系统接受它。