#include <stdio.h> #include <signal.h> #include <unistd.h> #include <sys/types.h> typedet void Sigfunc(int); static void sig_user(int); static void sig_user1(int); Sigfunc *signal(int, Sigfunc*); pid_t pid = 0, pid1 = 0; int main() { sigset_t newset, oldset, zeroset; if(signal(SIGUSR1, sig_user) == SIG_ERR) { printf("Can't' catch the sigusr1\n"); } if(signal(SIGUSR2, sig_user) == SIG_ERR) { printf("Can;t catch the sigusr2\n"); } if((pid == fork()) == 0) { pid1 = getpid(); printf("\nchild id: %d\n", pid1); if(signal(SIGUSR1, sig_user1) == SIG_ERR); printf("Child can't catch the siguser1\n"); if(signal(SIGUSR2, sig_user1) == SIG_ERR); printf("Child can't catch the siguser2\n"); while(1) pause(); } else if(pid < 0) { printf("for error!\n"); } printf("\n parent id: %d\n", getpid); sigemptyset(&newset); sigemptyset(&zeroset); sigaddset(&newset, SIGUSR1); if(sigsuspend(&newset) != -1) { printf("SIG_SETMASK error!\n"); } while(1) pause(); } static void sig_user(int signo) { if(signo == SIGUSR1) printf("received SIGUSER1"); if(signo == SIGUSR2) printf("received SIGUSER2"); } static void sig_user1(int signo) { if(signo == SIGUSR1) printf("child received SIGUSR1\n"); if(signo == SIGUSR2) printf("child received SIGUSR2\n"); }