小查要说 發表於 2025-5-8 09:54:00

信号练习

<pre><code>/*******************************************************************************
*
* 设计两个程序,A执行死循环,B程序给发送一个结束信号给程序A,当程序A接收到信号之后则执行相应的任务。
* author:jindouliu2024@163.com
* date:2025.5.8
* Copyright (c)2024-2025   jindouliu2024@163.com   All right Reserved
*
* *****************************************************************************/
</code></pre>
<pre><code>//程序A
#include&lt;stdio.h&gt;
#include&lt;signal.h&gt;
//信号处理函数
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;
}
</code></pre>
<pre><code>
#include&lt;stdio.h&gt;
#include&lt;signal.h&gt;
int main(int argc,char *argv[])
{
        int id,data;
        //获取进程id,在终端输入ps -ef命令
        printf("请输入id:");
        scanf("%d",&amp;id);
        while(1){
                //判断输入的数据,根据数据发送相应的信号
                printf("请输入user1 or user2:");
                scanf("%d",&amp;data);
                if(data == 1){
                        kill(id,SIGUSR1);
                }
                if(data == 2){
                        kill(id,SIGUSR2);
                }
        }
       
        return 0;
}
</code></pre>
<p>把快捷键Ctrl+C的对应信号进行阻塞,需要创建一个信号集,把该信号添加到信号集,对信号集属性进行设置(阻塞),然后测试发送该信号是否会被进程响应。</p>
<pre><code>#include&lt;stdio.h&gt;
#include&lt;signal.h&gt;
#include&lt;string.h&gt;
#include&lt;errno.h&gt;
int main(int argc,char *argv[])
{
        sigset_t arr;
        //将Ctrl +c 加入到信号集
        sigaddset(&amp;arr,SIGINT);
        //创建一个信号集并设置为阻塞特性
        int flag = sigprocmask(SIG_BLOCK,&amp;arr,NULL);
        if(flag == -1){
                printf("sigprocmask error\n");
                return 1;
        }
        while(1);
       
       
        return 0;
}
</code></pre><br><br>
来源:https://www.cnblogs.com/lradian/p/18865705
頁: [1]
查看完整版本: 信号练习