📄 sgiaction_sample.c
字号:
#include <signal.h>#include <unistd.h>#include <sys/types.h> void sig_handle(int signum,siginfo_t *sig_info,void *other){ //用于防止同时发送多个信号(采用阻塞的方法) sigset_t siglist; sigemptyset(&siglist); //初始化信号集 siglist sigaddset(&siglist,SIGUSR2); //将SIGUSR2加入信号集siglist sigprocmask(SIG_BLOCK,&siglist,NULL); //改变当前的阻塞信号为siglist int i; printf("start...\n"); for(i=0;i<5;i++) { printf("ding....\n"); sleep(1); } printf("end...\n"); printf("signal value %d\n",sig_info->si_int); //printf("send process id %d\n",sig_info->si_pid);}int main(int argc,char *argv[]){ pid_t child; child=fork(); //创建子进程 if(child==0) { struct sigaction sigct; sigct.sa_sigaction=sig_handle; //关联信号处理函数 sigct.sa_flags=SA_SIGINFO; sigaction(SIGUSR2,&sigct,NULL); //安装用户自定义信号 while(1) { //printf("ssss\n"); sleep(1); } exit(0); } sleep(2); union sigval sig_val; sig_val.sival_int=200; //设定信号携带的数据值 printf("parent id %d\n",getpid()); sigqueue(child,SIGUSR2,sig_val); //给子进程发送SIGUSR2信号,并携带sig_val return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -