私は2つのforループと最初のforループ(1〜5の出力とその間の1秒のスリープ)の間にSIGINTとSIGQUITをブロックするプログラムを作成しています。ループのみがブロックされます。私は正常に最初のループのための正しい信号をブロックし、次に2番目のループで、私はSIGQUITをブロックしようとしますが、両方の信号はまだブロックされているようです。ここでSIGINTとSIGQUITのブロックとブロック解除
は、私は今のよう持っているものです。
#include <unistd.h>
#include <stdio.h>
#include <wait.h>
#include <signal.h>
#include <string.h>
void hd1(int sig){
if(sig == SIGINT){
printf(" SIGINT Recieved\n");
}else if(sig == SIGQUIT){
printf(" SIGQUIT Recieved\n");
}
}
int main(){
sigset_t new_set;
sigset_t old_set;
//struct sigaction act;
//memset(&act, 0, sizeof(act));
//act.sa_handler = hd1;
//sigaction(SIGINT, &act, 0);
//sigaction(SIGQUIT, &act, 0);
sigemptyset(&new_set);
sigaddset(&new_set, SIGINT);
sigaddset(&new_set, SIGQUIT);
sigprocmask(SIG_BLOCK, &new_set, &old_set);
for(int i = 1; i <= 5; i++){
printf("%d\n", i);
sleep(1);
}
sigdelset(&new_set, SIGQUIT);
for(int i = 1; i <= 5; i++){
printf("%d\n", i);
sleep(1);
}
}
私はマスクをリセットするためにブロックを解除してsetmaskするsigprocmask
を使用して試してみましたが、私は信号のブロックを解除するときには、ループの後、プログラムを終了します。
あなたは 'sigemptyset(....)をしようと持っている。siggaddset(...、SIGINT);は、sigprocmask(SIG_UNBLOCK、...);'? –