#include <stdio.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> void handle(int s) { printf("外部用户中断处理...!\n"); sleep(5); printf("外部用户中断处理结束!\n"); } main() { int sum=0; int i; sigset_t sigs,sigt,sigu; sigemptyset(&sigs); sigemptyset(&sigt); sigemptyset(&sigu); sigaddset(&sigs,SIGINT); sigaddset(&sigs,SIGUSR1);// signal(SIGINT,handle); sigprocmask(SIG_BLOCK,&sigs,0); for(i=0;i<10;i++) { printf("正在拷贝电影<%d>!\n",i); sleep(7);//模拟业务处理时间比较长 printf("电影拷贝完毕<%d>!\n",i); sigpending(&sigu); if(sigismember(&sigu,SIGINT)) { sigsuspend(&sigt); } } printf("所有电影拷贝完毕\n",sum); printf("over!\n"); sigprocmask(SIG_UNBLOCK,&sigs,0); } -- 插入 -- 39,1 底端
信号屏蔽的切换的理解sigsuspend,布布扣,bubuko.com
原文:http://www.cnblogs.com/huacw/p/3579411.html