宓碧莹 发表于 2025-5-29 10:52:05

信号练习

/*******************************************************************************
*
* 设计两个程序,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;
}
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 信号练习