#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
int current = 0;
void sigint_handle(int sig) {
printf("sigint: %d\n", current);
}
int main()
{
sigset(SIGINT, sigint_handle);
while (1) {
current++;
// if (current % 1000000 == 0) printf("hey\n");
}
return 0;
}
GCC 7.2.0を使用して最適化レベル-O0
でコンパイルした場合、このコードは期待どおりに動作します。しかし、他の最適化レベルでは、送信sigintは毎回sigint: 0
を出力します。また、出力ラインのコメントが外されたときに、最適化に関係なく正しく動作します。GCC - POSIXシグナルを使用するときの最適化の無効化
シグナルに関して何か不足していますか、これはgccのバグですか、これは意図した動作ですか(もしそうなら、なぜですか?)?
宣言' current':私はこのトピックに関するオースティングループの課題追跡の未解決の問題があります。 –
他に何が欠けていますか?シグナルハンドラで 'printf()'を呼び出すことは、未定義の動作です。非同期シグナルセーフな関数だけが、シグナルハンドラから安全に呼び出すことができます。 –