我在我的 ubuntu 机器上运行一个守护进程 java 进程:
java -cp (...) &> err.log&
进程随机运行一段时间,然后就消失了。日志中没有任何内容,err.log,没有创建 JVM 崩溃文件 (hs_err_*.log),什么都没有。我的两个问题是:
1) java进程在什么情况下会突然结束?
2) 有没有办法知道进程发生了什么(知道 PID)? UNIX 是否以某种方式保留有关已完成进程的信息?
最佳答案
1) java进程在什么情况下会突然结束?
当它自己退出时,但我猜你排除了这种情况,或者当它被 SIGKILL 杀死时。如果您使用的是 Linux,这可能是 oom killer 。您查看系统消息日志了吗?
2) 有没有办法知道进程发生了什么(知道 PID)?
通常不会,除非您配置一些跟踪工具来获取该信息
UNIX 是否以某种方式保留有关已完成进程的信息?
不,但是根据您使用的 Unix 变体,添加这些内容可能很简单。
在您的示例中,您可以使用 echo $?
如果是 265
,则表示进程已被信号 9 (=265-256
) 终止。
关于Java - 在什么情况下 JVM 可能会突然崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10259934/