信号的转存,进程的挂起/激活(一)
#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