我正在我的ubuntu机器上运行一个守护程序java进程:
java -cp (...) &> err.log&
该过程运行一段随机时间,然后消失。 LOGs,err.log中没有任何内容,没有创建JVM崩溃文件(hs_err _ * .log),什么都没有。我的两个问题是:
1)在什么情况下java进程可以突然完成?
2)有没有办法知道这个过程发生了什么(知道PID)? UNIX是否以某种方式保存有关已完成流程的信息?
答案 0 :(得分:3)
1)在什么情况下java进程可以突然完成?
当它以自己的方式退出时,我猜你已经排除了这种情况,或者当它被SIGKILL杀死时。如果你在Linux上,这可能是一个杀手锏。您是否查看了系统消息日志?
2)有没有办法知道过程发生了什么(知道PID)?
除非您配置一些跟踪工具来获取该信息,否则通常不会这样做
UNIX是否以某种方式保留有关已完成流程的信息?
不,但是根据您使用的Unix变体,可能需要添加一些简单的东西。
在您的示例中,您只需使用echo $?
如果是265
,则意味着该过程被信号9(=265-256
)杀死。
答案 1 :(得分:0)
我会编写一个简单的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
也许,退出代码可能会显示出一些内容。
答案 2 :(得分:0)
我会用YAJSW作为守护进程运行它,因为它允许多种方式来监视内存等,有重启选项,你还可以启用包装进程登录,这样你就可以获得很多信息。一个问题。