4

状況:アプリケーションがシャットダウンするたびにアプリケーションを再起動する、キープアライブシェルスクリプトがあります。SIGTERMただし、アプリケーションがor SIGINTkillCtrl+Cなど)、つまりシャットダウンフックを介して閉じられた場合は、これを実行したくありません。exitただし、呼び出しが違法であるためにシャットダウンフックを終了するときに、終了コードを設定する方法がないため、キープアライブスクリプトと通信します。

Javadocからexit

仮想マシンがシャットダウンシーケンスを開始した後にこのメソッドが呼び出された場合、シャットダウンフックが実行されていると、このメソッドは無期限にブロックされます。シャットダウンフックがすでに実行されており、終了時のファイナライズが有効になっている場合、ステータスがゼロ以外の場合、このメソッドは指定されたステータスコードで仮想マシンを停止します。それ以外の場合は、無期限にブロックします。

これは可能ですか?

4

3 に答える 3

4

プロセスがシグナルによって強制終了された場合、$?変数は次のように設定され128 + signalます。

bash$ sleep 3;echo $?
0

bash$ sleep 3;echo $?
^C
130

ここに130あり128 + SIGINTます。

于 2013-01-03T18:13:12.607 に答える
0

プロセスの PID を変数で取得し、waitビルトインを使用します。プロセスがシグナルによって終了した場合、リターン コードはwait128 + シグナル番号になります。

#
# 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
于 2013-01-03T18:15:56.377 に答える