APUE本によると:sig_int_flag
のテストの後、しかしpause
へのコールの前にシグナルが発生すると、プロセスは永久にスリープ状態になる可能性があります。シグナルが一時停止すると、プログラムは永久にスリープ状態になるのはなぜですか?
なぜ、誰かが私に教えてくれるのですか? ありがとうございました。
int sig_int(); /* my signal handling function */
int sig_int_flag; /* set nonzero when signal occurs */
int main() {
signal(SIGINT, sig_int) /* establish handler */
.
.
.
while (sig_int_flag == 0)
pause(); /* go to sleep, waiting for signal */
}
int sig_int() {
signal(SIGINT, sig_int); /* reestablish handler for next time */
sig_int_flag = 1; /* set flag for main loop to examine */
}
'SIGNT'が処理される前に' while'条件がテストされた場合、 'sig_int_flag'は初期化されずに読み込まれるため、コードはUBに実行されます。 – alk
次の 'SIGINT'が処理されるまで、" *。〜永遠にスリープ状態になります* "。 – alk
@alkはグローバルなのでゼロではないでしょうか?私はこれが正しいと言っているわけではありません。 –