信号练习

/*******************************************************************************
*
* 设计两个程序,A执行死循环,B程序给发送一个结束信号给程序A,当程序A接收到信号之后则执行相应的任务。
* author:jindouliu2024@163.com 
* date:2025.5.8
* Copyright (c)  2024-2025   jindouliu2024@163.com   All right Reserved
* 
* *****************************************************************************/
//程序A
#include<stdio.h>
#include<signal.h>
//信号处理函数
void sig_handler(int signal)
{
	//如果是接受到的信号是SIGUSR1,则执行
	if(signal == SIGUSR1){
		printf("this is SIGUSR1\n");

	}
	//如果是接受到的信号是SIGUSR2,则执行
	if(signal == SIGUSR2){
		printf("this is SIGUSR2\n");
		
	}
}
int main()
{
	printf("running\n");
	signal(SIGUSR1,sig_handler);
	signal(SIGUSR2,sig_handler);
	while(1);

	return 0;
}

#include<stdio.h>
#include<signal.h>
int main(int argc,char *argv[])
{
	int id,data;
	//获取进程id,在终端输入ps -ef命令
	printf("请输入id:");
	scanf("%d",&id);
	while(1){
		//判断输入的数据,根据数据发送相应的信号
		printf("请输入user1 or user2:");
		scanf("%d",&data);
		if(data == 1){
			kill(id,SIGUSR1);
		}
		if(data == 2){
			kill(id,SIGUSR2);
		}
	}
	
	return 0;
}

把快捷键Ctrl+C的对应信号进行阻塞,需要创建一个信号集,把该信号添加到信号集,对信号集属性进行设置(阻塞),然后测试发送该信号是否会被进程响应。

#include<stdio.h>
#include<signal.h>
#include<string.h>
#include<errno.h>
int main(int argc,char *argv[])
{
	sigset_t arr;
	//将Ctrl +c 加入到信号集
	sigaddset(&arr,SIGINT);
	//创建一个信号集并设置为阻塞特性
	int flag = sigprocmask(SIG_BLOCK,&arr,NULL);
	if(flag == -1){
		printf("sigprocmask error\n");
		return 1;
	}
	while(1);
	
	
	return 0;
}