HTTP要求を処理するアプリケーションがあり、このアプリケーションが要求を処理するときに要求に関するいくつかの情報をstdout
。この場合、バックグラウンドで実行した後、そのプロセスでdisown -h
andを実行しましたdisown
。それでもstdout
予想される印刷が続行されます。また、このプロセスはSSHセッション内で開始されます。インターネット接続が不安定で、上記のすべての操作を実行した後、接続が切断され、SSHがこれが起こったことを知らないとしましょう。もちろん、SSHが実際に切断されたことに気づくのに数分かかります。
この間、SSHセッションが実際に終了するまで、要求の処理中にアプリケーションでタイムアウトが発生し始めます。これはstdout
、PTYが存在しなくなったときの書き込みに関連するバッファリングの問題によるものですか?
答え1
disown
SIGHUP
SSHが終了すると、アプリケーションは信号を受信できません。ただし、アプリケーションが後で失効したPTYに書き込むと、信号が届きますSIGPIPE
。処理または無視しない限り、デフォルトではSIGPIPE
アプリケーションは終了します。
アプリケーションが処理している場合、書き込みSIGPIPE
試行はエラー状態を返し、エラーを無視するか、中断するか、または他のアクションを取るかを決定するのはアプリケーションに依存します。 (エラーを無視することが賢明な場合はほとんどありません。)
アプリが死ぬのを防ぐための最も簡単な方法が欲しい場合は、ファイルにリダイレクトしたくない場合は、私からscreen
実行するtmux
か。mosh
ssh