我正在我的Ubuntu机器上运行一个守护进程java进程:
java -cp (...) &> err.log&
该进程运行随机时间后突然消失。日志中没有任何信息,也没有创建JVM崩溃文件(hs_err_*.log),没有异常。我的两个问题:
1)在什么情况下,Java进程会突然结束?
2)是否有办法知道进程发生了什么(知道PID)?UNIX是否以某种方式保留有关已完成进程的信息?
我正在我的Ubuntu机器上运行一个守护进程java进程:
java -cp (...) &> err.log&
1)在什么情况下,Java进程会突然结束?
2)是否有办法知道进程发生了什么(知道PID)?UNIX是否以某种方式保留有关已完成进程的信息?
1) 在哪些情况下,Java进程会突然结束?
当它自己退出时,但我猜你排除了这种情况,或者当它被使用SIGKILL杀死时。如果您在Linux上,则可能是OOM killer。您是否查看系统消息日志?
2) 有没有办法知道发生了什么事(知道PID)?
通常不行,除非您配置一些跟踪工具以获取该信息。
UNIX是否以某种方式保留已完成进程的信息?
否,但取决于您使用的Unix变体,这可能是一个简单的添加。在您的示例中,您可以使用echo $?
打印进程退出状态。
如果是265
,那么意味着使用信号9杀死了该进程(=265-256
)。
我会编写一个简单的shell脚本,以某种方式在JVM终止时提醒我。也许发送一封带有JVM退出代码的电子邮件。
#!/bin/sh
# Launch JVM and wait...
java -cp ...
# do something with the exit code $?
# log it to a file or mail it yourself