2013-01-03 25 views
2

情况:我有一个保持活动的shell脚本,每当它关闭时都会重新启动应用程序。但是,如果应用程序通过SIGTERMSIGINTkillCtrl+C等)关闭,我不希望它执行此操作。但是,我无法设置退出代码,因此在退出关机钩时与保持活动脚本进行通信,因为调用exit是非法的。Java - 以编程方式设置SIGTERM的退出代码

从JavaDoc以exit

如果虚拟机已开始关闭序列之后接着如果关闭挂钩正在运行该方法将无限期地阻止此方法被调用。如果关闭钩子已经运行并且启用了退出结束,那么如果状态为非零,则此方法将使用给定的状态代码暂停虚拟机;否则,它会无限期地阻止。

这可能吗?

回答

3

如果进程已被信号被杀,$?变量will be set to 128 + signal

bash$ sleep 3;echo $? 
0 

bash$ sleep 3;echo $? 
^C 
130 

这里,130128 + SIGINT

0

将变量的进程PID捕获到变量中并使用wait内建函数:如果进程已被信号终止,则wait的返回码将为128 +信号编号。

# 
# Note: output from shell trimmed 
# 
# Launch cat in the background, capture the PID 
$ cat & PIDTOCHECK=$! 
$ echo $PIDTOCHECK 
27764 
# 
# Call wait a first time: the program is halted waiting for input (SIGTTIN) 
# 
$ wait $PIDTOCHECK ; echo $? 
149 
# 
# Now kill cat, and call wait again 
# 
$ kill %1 
$ wait $PIDTOCHECK ; echo $? 
143 
相关问题