23,124
社区成员
发帖
与我相关
我的任务
分享
/* main.c */
#include <sys/wait.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
static void sig_int(int);
int main(int argc, char *argv[])
{
signal(SIGINT, sig_int);
if (fork() == 0) {
if (fork() == 0) {
while (1) {
printf("pid: %ld\n", (long)getpid());
sleep(1);
}
}
exit(0);
}
wait(0);
pause();
}
static void sig_int(int signo)
{
printf("pid: %ld caught SIGINT", (long)getpid());
}
sigset_t blockmask, oldmask;
sigemptyset(&blockmask);
sigaddset(&blockmask, SIGINT);
sigprocmask(SIG_BLOCK, &blockmask, &oldmask); // 父进程里阻塞
pid_t child = fork();
if (child < 0)
err_sys("fork error");
else if (child == 0) {
pause();
exit(0);
}
sigprocmask(SIG_SETMASK, &oldmask, 0); // 父进程里再恢复
pause();
exit(0);