我正在为我的litte程序构建一个重启器。
基本思路是使用Runtime.getRuntime().exec
运行一个流程,该流程会对程序本身进行处理,然后运行System.exit(0);
这是重启的代码:
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
try {
Runtime.getRuntime().exec(strList);
} catch (IOException e) {
e.printStackTrace();
}
}
});
// exit
System.exit(0);
其中strList
是String[]
,类似于:
{"/bin/bash","-c","java -jar path/to.jar"}
不要担心操作系统的可移植性,程序将只在Ubuntu上运行。
程序重启正常,或者至少有一个新进程正在运行(并在一段时间后继续重启)
问题是重启后我松开了控制台,所以我不知道程序实际发生了什么。
有没有办法在“同一个窗口”中启动新流程或以任何方式访问它(可能是通过使用屏幕?)?