gpt4 book ai didi

java - 从 java 杀死 linux 进程在 Runnable JAR 中不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 04:17:23 25 4
gpt4 key购买 nike

在我的程序中,我启动一个 gnome 终端并在其中执行一个程序。当该程序完成运行模拟后,我终止该进程并再次重新启动它。杀死它很重要,因为否则即使在模拟停止之后,也不会释放所有资源(这使得 HeapSpaceError 更有可能发生)。

启动进程的方法如下所示:

private void startNeSSiAndWait(int i) {

System.out.println("OS is " + os);
// if some unix system - we assume there is a gnome-terminal
if(os.contains("nix") || os.contains("nux") || os.contains("aix")){

String[] cmds = {"gnome-terminal", "-x" ,"bash", "-c", "cd '" + nessiPath + "'; export JAVA_HOME="+javaHome +"; ./nessi2.sh"};
try {
nessiProcess = Runtime.getRuntime().exec(cmds); // nessiProcess is an instance of Process

Thread.sleep(5000); // wait till programm is ready
} catch (IOException ex) {
System.err.println("Error in executing proces..");
ex.printStackTrace();

}catch(InterruptedException ex){
System.err.println("Error in sleeping..");
ex.printStackTrace();
}

}else if(os.contains("win")){
...
}

}

终止进程的方法是:

private void killNeSSiAndWait(){

nessiProcess.destroy();
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
System.err.println("Error in sleeping..");
ex.printStackTrace();
}
System.out.println("destroyed");
}

只要我从 NetBeans 启动这些方法,它们就可以正常工作。但是,一旦我将其导出为 Runnable JAR,终止该进程就不起作用了。

我在使用 Java 6 的 Ubuntu 12.10 32 位机器上运行它。

它不能作为 Runnable JAR 运行的原因可能是什么?

编辑:
输出没有错误。终端只是继续执行 nessi2.sh 并忽略 nessiProcess.destroy()

NeSSi2 是一款模拟器,由 DAI-Laboratories 开发,有关详细信息,请参阅 here 。我们只使用后端。 nessi-backend 唯一可见的输出是通过终端。
我知道 nessi 仍在运行,因为:

  • 终端仍在运行 - 当没有更多进程在其中运行时,它会自行终止
  • 模拟重新启动而不重新启动 nessi(但这不是我想要的)

由于我们仅使用后端,并且您只会在终端中看到一些文本,因此我认为没有理由发布屏幕截图。如果有人仍然喜欢看它,我可以发布屏幕截图。

我们正在使用 NeSSi2 进行一些网络模拟。为此,我的程序首先启动后端,然后开始模拟并等待模拟完成。仿真完成后,程序会终止 NeSSi2,重新启动它并开始另一个仿真。该过程循环运行多次。

最佳答案

正如 RotN 爵士所猜测的那样,问题是由于用户权限造成的。我仍然不知道为什么,但他的评论解决了我的问题。
谢谢你。

关于java - 从 java 杀死 linux 进程在 Runnable JAR 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15637451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com