23,114
社区成员
发帖
与我相关
我的任务
分享
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <signal.h>siget_t set_op;
sigset_t set_pr;
void opSigint()
{
sigaddset(&set_op, SIGINT);
sigprocmask(SIG_BLOCK, &set_op, NULL);
}
void printSig()
{
sigpending(&set_pr);
int i = 1;
for (; i <= _NSIG; i++) {
if (sigismember(&set_pr, i) == 1)
putchar('1');
else
putchar('0');
}
printf("\n");
alarm(2);
}
int main()
{
sigemptyset(&set_op);
sigemptyset(&set_pr);
sigaddset(&set_op, SIGINT);
sigprocmask(SIG_BLOCK, &set_op, NULL);
alarm(1);
signal(SIGALRM, printSig);
pid_t pid = fork();
if(pid == 0){
while(1){
sleep(2);
kill(getppid(),SIGINT);
}
}
else if(pid > 0){
char input;
while(getchar() != 'a'){
;
}
sigset_t set_op2;
sigemptyset(&set_op2);
sigaddset(&set_op2, SIGINT);
sigprocmask(SIG_UNBLOCK, &set_op2, NULL);
}
return 0;
}
cdp@DESKTOP-3KBDDMU:~/code$ ./a.out
00000000000000000000000000000000000000000000000000000000000000000
01000000000000000000000000000000000000000000000000000000000000000
01000000000000000000000000000000000000000000000000000000000000000
01000000000000000000000000000000000000000000000000000000000000000
a
cdp@DESKTOP-3KBDDMU:~/code$