/*******************************************************************************
*
* 设计两个程序,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;
}