我创建了一个运行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正在生成。
答案 0 :(得分:0)
您尝试运行的命令(“echo dkkdk | sudo ....)是一个shell命令。您需要告诉runtime.exec()运行'bash -c echo dkkdk | sudo ..'
另请注意,runtime.exec是异步的,可能/可能/可能会在子进程完成之前返回到您的程序。
另外,我无法像你想要的那样将超级用户密码传递给sudo。并不是说它不适合你只是因为我无法让我的系统接受它。