)、私が持っている:シグナルが捕捉されないのはなぜですか? (私のメインの先頭に
signal(SIGTERM, SIGTERM_handler);
SIGTERM_handlerは次のとおりです。
void SIGTERM_handler(int signum) {
NSLog(@"Caught signal: [%d]. Cleaning up ...",signum);
//cleanup();
NSLog(@"Done cleaning up. Exiting ...");
exit(EXIT_FAILURE);
}
これらの線が印刷されることはありません。ハンドラでブレークポイントを設定すると、決してヒットしません。私はどこでもsigaction()
と呼んでいません。 GDBは、私が心配しているシグナル(handle SIGTERM SIGINT pass stop print
またはhandle SIGTERM SIGINT pass nostop print
のいずれか)を通過するように設定されています。デフォルトのシグナルハンドラでさえ機能していません - SIGINT(ハンドラを指定していない)をプログラムに送ることも何もしません。
この原因は何ですか?
ログファイルバッファがフラッシュされない可能性はありますか? –
シグナルがgdbで実行されているときに、シグナルをプロセスにどのように送信しますか?私は他のシグナルの1つを試してみることをお勧めします(kill -1またはkill -2) – KevinDTimm
私は 'kill -2'、' kill -15'などでシグナルを送信しています。 GDBは本当に停止し、私のプログラムがシグナルを受け取ったと言うので、それが働いているのを知っています。それでもハンドラは起動しません。 –