linux 信号

参考链接:  

信号内容具体分析:   http://www.cnblogs.com/hoys/archive/2012/08/19/2646377.html

信号的例子介绍:  http://blog.csdn.net/jnu_simba/article/details/8947652

 

 

 信号值位于SIGRTMIN和SIGRTMAX为可靠信号,也为实时信号,支持排队操作, 其余为非可靠信号。

 

信号的简单例子:

 

复制代码
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>



void SigSendTestMail(int signo)
{
   printf("get signal:%d\n", signo);
}



int main(int argc, char const *argv[])
{
    
    printf("SIGRTMIN val:%d\n", SIGRTMIN);
    struct sigaction          act;
    act.sa_handler = SigSendTestMail;
    act.sa_flags   = 0;
    sigemptyset(&act.sa_mask);
    sigaction(SIGRTMIN+10, &act, 0);



    act.sa_handler = SigSendTestMail;
    act.sa_flags   = 0;
    sigemptyset(&act.sa_mask);
    sigaction(SIGRTMIN+11, &act, 0);



    act.sa_handler = SigSendTestMail;
    act.sa_flags   = 0;
    sigemptyset(&act.sa_mask);
    sigaction(SIGRTMIN+12, &act, 0);




    while(1) {
        sleep(3);
    }

    return 0;
}
   
复制代码

sigqueue结构体的使用:

复制代码
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>

void sighandler(int signo, siginfo_t *info,void *ctx);
//给自身传递信息
int main(void)
{

    struct sigaction act;
    act.sa_sigaction = sighandler;
    sigemptyset(&act.sa_mask);
    act.sa_flags = SA_SIGINFO;//信息传递开关
    if(sigaction(42,&act,NULL) == -1){
        perror("sigaction error");
        exit(EXIT_FAILURE);
    }
    sleep(2);
    union sigval mysigval;
    mysigval.sival_int = 100;
    if(sigqueue(getpid(),42,mysigval) == -1){
        perror("sigqueue error");
        exit(EXIT_FAILURE);
    }
    return 0;
}

void sighandler(int signo, siginfo_t *info,void *ctx)
{
    //以下两种方式都能获得sigqueue发来的数据
    printf("receive the data from siqueue by info->si_int is %d\n",info->si_int);
    printf("receive the data from siqueue by info->si_value.sival_int is %d\n",info->si_value.sival_int);

}
复制代码

 

  

posted @   cogitoergosum  阅读(156)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示