由于项目需要,开发的程序需要在LINUX上运行,后来发现一个问题,当我在窗口执行命令java xxxxxxxx之后,关掉窗口那么进程也就自动关闭了,后来去网上找了一些资料,有几个简单的方法,也看到了基本原理
首先贴一下参考资料Linux 技巧:让进程在后台可靠运行的几种方法
当窗口关闭的时候,当前窗口运行的进程会收到一个SIGHUP信号,从而结束进程,按照文中所述,要么忽略该信号,要么将进程运行在其他会话当中。
本文解决方案如下:
1.NOHUP命令
使用NOHUP命令运行的程序会将输出输出到当前路径下nohup.out文件里,窗口关闭的时候进程不会关闭,简单易用
命令最后加&表示后台运行,不影响当前窗口继续工作。
2.EXIT
正常运行命令之后,使用EXIT登出会话,由于远程连接没有关闭,进程会继续运行。
3.代码中忽略SIGHUP信号
使用kill -l查询命令查询结果如下:
发现SIGHUP对应1,在java中,可以实现SignalHandler接口重写处理命令忽略SIGHUP命令,由于本项目需要自己发送结束命令,所以干脆写成了只处理收到自定义的结束命令才处理,其余全部忽略,代码如下:
public final class StartStop implements SignalHandler{
@Override
public void handle(Signal signal) {
if(signal.getNumber()==12){// 只处理12命令
// 业务代码
}
}
}