単純な nohup コマンドの動作がおかしいように見える問題があります。これを、Sleep という名前の小さな Java アプリに要約しました。
while (true)
Thread.sleep(10000).
次のように nohup を実行しています。
nohup java Sleep.java >> nohup.log 2>&1 &
次に、別のウィンドウで strace を実行して、次のようにシグナルを探し、pid (12345) を探します。
strace -tt -p 12345 -enone -e 'signal=!sigchld'
Process 16582 attached - interrupt to quit
元のウィンドウで「exit」と入力してシェルを閉じると、シグナルを受信せずにプロセスが実行され続けることがわかります。ただし、パテ ウィンドウを閉じると (メニュー バーの [x] をクリック)、nohup されたプロセスが SIGHUP を取得することがわかります。
strace -tt -p 16582 -enone -e 'signal=!sigchld'
Process 16582 attached - interrupt to quit
14:54:03.271286 --- SIGINT (Interrupt) @ 0 (0) ---
nohup は SIGHUP をインターセプトする/渡さないはずだと思っていました。それ以来、setsid の使用に切り替えたので、ターミナル ウィンドウをどのように閉じても正しい動作が得られます。私は何か間違ったことをしていますか?私が取り組んでいる実際の問題で深刻な問題を引き起こしている nohup が正しく機能していないようです。