システムがシャットダウンしたときにアプリケーションがSIGKILLを受信するのにSIGTERMを受信できないのはなぜですか?

システムがシャットダウンしたときにアプリケーションがSIGKILLを受信するのにSIGTERMを受信できないのはなぜですか?

私たちはXで始まるJavaアプリケーションを使用しています。/etc/X11/Xsessions.d/9999ngoma

root@denis-laptop:~# uname -a
Linux denis-laptop 2.6.32-36-generic #79-Ubuntu SMP Tue Nov 8 22:29:26 UTC 2011 i686 GNU/Linux

もともとGDMのフルスクリーン代替品として開発されました。システムの電源が切れると、アプリケーションがSIGTERMの代わりにSIGKILLを受け取るように見えます(これが一部のリソースがディスクに保存されない理由です)。

どうすればこれが起こりますか?

また、アプリケーションが/etc/X11/Xsessions.d/9999ngoma.exclusiveから排他的にロードされることをもう一度警告する必要があります。これは、Gnomeがアプリケーションが終了した後にのみロードされることを意味します(Xでアプリケーションを排他的に実行する他の方法はわかりません)。 GDMがSIGTERMを受信し、GDMセッション初期化プロセス(Xsession.dディレクトリのスクリプト)中に完了していないSIGKILLサブキーを受信した可能性はありますか?

答え1

アプリケーション、親プロセス、または親プロセスのいずれかが SIGTERM 信号を無視するように設定されている可能性があります。この設定は fork() 呼び出し全体から継承され、exec() 全体で変更されずに保持されます。

個々のプロセスで strace(1) を使用し、手動で SIGTERM を送信することで、この問題をさらに診断できます。トレース出力に信号が受信されていることが示されている場合、これは無視されません。

関連情報