那就只剩下Signal的情况了;经过一番排查后,发现每次tomcat意外退出的时间与ssh会话结束的时间正好吻合。而如果先ctrl-c终止test.sh进程,然后再关闭ssh终端的话,则java进程不会退出。当catalina.sh自身进程退出后,java进程的ppid变成了1花了很多的时间猜测可能是OS层面的原因,后来发现并没有关系。到了这一步,已经非常接近原因了,一定是shell对后台进程signal_handler做了什么手脚。按照这个线索我们google后了解到: shell在非交互模式下对后台进程处理SIGINT信号时设置的是IGNORE。不开启作业控制的话,脚本里的后台进程可以通过设置忽略SIGINT信号来避免父进程对组中成员的传播,因为对它来说这个信号已经没有意义。

关于 Tomcat进程意外退出的问题解析

关于 Tomcat进程意外退出的问题解析

关于 Tomcat进程意外退出的问题解析

关于 Tomcat进程意外退出的问题解析

关于 Tomcat进程意外退出的问题解析