信号的转存,进程的挂起/激活(一)
#include <stdio.h>
#include <signal.h>
void sig_int(int signo) {
printf("got signal:%d\n", signo);
}
int main(void) {
printf("\nprogram start\n");
sigset_t sig_usr2, sig_usr1;
signal(SIGUSR1, sig_int);
signal(SIGUSR2, sig_int);
sigemptyset(&sig_usr1);
sigaddset(&sig_usr1, SIGUSR1);
sigemptyset(&sig_usr2);
sigaddset(&sig_usr2, SIGUSR2);
if (sigprocmask(SIG_BLOCK, &sig_usr1, NULL) < 0) { //开始拦截信号usr1
perror("sigprocmask");
return -1;
}
printf("in critical region\n");
pause();
printf("out critical region\n");
if (sigprocmask(SIG_UNBLOCK, &sig_usr1, NULL) < 0) { //取出拦截到的usr1信号并触发
perror("sigprocmask");
return -1;
}
printf("program exit\n");
return 0;
}
运行:
[mofan@localhost Debug]$ ./a.out & [1] 57595 [mofan@localhost Debug]$ program start in critical region [mofan@localhost Debug]$ kill -USR1 57595 [mofan@localhost Debug]$ kill -USR1 57595 [mofan@localhost Debug]$ kill -USR2 57595 got signal:12 out critical region got signal:10 program exit

浙公网安备 33010602011771号