sgiaction_sample.c

来自「Linux网络编程PPT和源码,供学习参考」· C语言 代码 · 共 48 行

C
48
字号
#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 + =
减小字号Ctrl + -
显示快捷键?