2013-01-03 68 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 
相關問題