java没有等待unix二进制来完成执行

时间:2015-10-04 13:28:18

标签: java unix binary execution

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

当我从终端运行这个cputhrottle时,它一直在运行,直到我按下 - CTRL + C(这是正常行为)。

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

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

那么,有没有办法告诉java继续运行cputhrottle二进制文件,而不是关闭它。

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

而且,如果我在shell脚本中添加sleep,那么它没有正确执行,更多的是没有Exception正在生成。

1 个答案:

答案 0 :(得分:0)

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

另请注意,runtime.exec是异步的,可能/可能/可能会在子进程完成之前返回到您的程序。

另外,我无法像你想要的那样将超级用户密码传递给sudo。并不是说它不适合你只是因为我无法让我的系统接受它。