SIGTERMとSIGKILLは、システムが正常に動作しているときに送信されます。

SIGTERMとSIGKILLは、システムが正常に動作しているときに送信されます。

マルチスレッド方式でTCPソケットを処理するプログラム(C ++)があります。マルチスレッドは約100スレッド(POSIXスレッド)で非常に集約的です。

時には、プログラムがいつ終了するかわからない場合がありますSIGTERM。インターネット検索後にシステムが正しく送信されないことがわかりましたSIGTERM。私はこの信号を無視すると何が起こるのかを知ることにしました。今システムがSIGKILL。私はそれを使用しようとすると仮定し、SIGTERMアプリが終了しない場合、システムはアプリを終了します。

gdbで実行してみましたが、何の信号も受け取れませんでした。

Valgrindで実行しましたが、信号はありません。 valgrind エラーもありません。メモリ消費は正常でメモリリークはないようです。終了すると、7Mbのヒープが使用されます。

疑わしいことはありません/var/log/messages, /var/log/syslogd

システムは Debian 2.6.32-5 です。

基本的に質問は、システムがそれを任意のプロセスにSIGTERM送信できるのはなぜですか?SIGKILLその時点でどのように止まり、何が起こるのかを見ることができますか? (gdbは動作を変更します。)

ベストアンサー1

「システム」は非常にあいまいな用語です。カーネルについて話すと、カーネルは決してSIGTERMを送信しません。 OOM Killerが呼び出されると、SIGKILLを送信します。

スクリプトにバグがあるか、コマンドがプロセスと一致しない可能性がpkillあります。killallstartコマンドを使用すると、gdbプロセス名と引数が異なり、pkill/とは異なるように見えますkillall

おすすめ記事