![](/img/trans.png)
[英]Compiling java file at runtime works on eclipse but doesn't work from an exported runnable jar file
[英]Killing linux process from java doesn't work in Runnable JAR
在我的程序中,我启动一个gnome-terminal并在其中执行一个程序。 当该程序完成模拟运行后,我终止了该过程,然后再次重新启动。 杀死它很重要,因为即使仿真停止后,也不会释放所有资源(这使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启动,这些方法就可以正常工作。 但是,一旦我将其导出为可运行的JAR,杀死该进程就行不通了。
我正在具有Java 6的Ubuntu 12.10 32Bit计算机上运行它。
它不能作为可运行的JAR起作用的原因可能是什么?
编辑 :
没有错误作为输出。 终端仅继续执行nessi2.sh并忽略nessiProcess.destroy()
。
NeSSi2是由DAI-Laboratories开发的模拟器,有关更多信息,请参见此处 。 我们仅使用后端。 nessi-backend的唯一可见输出是通过终端。
我知道nessi仍在运行,因为:
由于我们仅使用后端,并且您只会在终端中看到一些文本,因此我认为没有理由发布屏幕截图。 如果仍然有人喜欢,我可以发布屏幕截图。
我们正在使用NeSSi2进行一些网络仿真。 为此,我的程序首先启动后端,然后开始仿真并等待直到仿真完成。 模拟完成后,程序将终止NeSSi2,重新启动它并开始另一个模拟。 此过程循环运行多次。
正如RotN爵士所猜测的那样,问题出在用户特权上。 我仍然不知道为什么,但是他的评论解决了我的问题。
感谢那。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.