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); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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 中如何实现缓存的预热?