如何成功杀死java进程并在unix中重启?

时间:2011-05-25 21:27:43

标签: java unix process centos kill

我一直试图在一夜之间运行我的java程序,但我需要重新启动它,以保存它的进度并完全重启机器。几个小时后,我让程序保存进度并执行一些重启文件来重启程序。

void restartServer() {
    try {
        Runtime rt = Runtime.getRuntime();
        rt.exec("./restart.bat");
    } catch (java.io.IOException err) {
        logError(err.getMessage());
    }
}

在restart.bat里面我有:

echo Restarting Server
killall -9 java
sleep 2;
nohup java -Xmx200m -classpath bin server.Main;

然而它不起作用。它说:

[root@linode java]# ./restart.bat
Restarting Server
: no process killed
: command not found 3:
nohup: appending output to `nohup.out'
: command not found 4:
[root@linode java]#

为什么说java进程在运行时没有进程被杀死?为什么说命令没找到?它永远不会重启程序。

3 个答案:

答案 0 :(得分:1)

如何将#!/bin/sh或类似内容放在restart.bat的第一行

BTW,.bat是linux系统扩展的一个非常糟糕的选择。

答案 1 :(得分:1)

你的JVM像中间进程一样被杀死是否安全?如果没有,您可以考虑使用JMX bean来检查程序状态并从JVM内部执行关闭。

答案 2 :(得分:1)

不是从服务器本身启动应用程序,而是可以执行如下脚本:

#!/bin/sh
while [ 1 ]
do
    nohup java -Xmx200m -classpath bin server.Main;
done

这将在退出后重新启动该过程。在您的savestate退出后,它将自动重启。