当前位置: 首页 > news >正文

信号相关函数

目录

  • kill
    • 函数原型
    • 描述
    • 返回值
  • raise
    • 函数原型
    • 描述
    • 返回值
  • signal
    • 函数原型
    • 参数
    • 信号句柄
    • 返回值
    • 用法
  • pause
    • 函数原型
    • 函数返回值
  • psignal
    • 函数原型
    • 描述
    • 参数

kill

函数原型

#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid,int sig);

描述

pid描述
>0kill发送信号sig给进程pid
0kill发送信号给和当前进程在同一进程组的所有进程
-1信号发送给系统内的所有进程
<-1kill发送信号sig给进程组-pid中的每个进程

返回值

  • 如果成功完成返回值0
  • 失败返回-1,并设置errno

raise

函数原型

#include <signal.h>
int raise(int sig);

描述

发送一个sig信号给当前进程。raise()是线程安全的函数。与kill()的不同之处是,kill()发射信号给指定的进程(通过pid参数)

当raise()发射的信号,导致了一个信号句柄被调用的时候,raise()在信号句柄返回之后被返回。

返回值

成功0,失败返回非0值(不一定是-1)

signal

对一个信号指定新动作或回到其原先的动作

函数原型

#include <signal.h>
typedef void (*sighandler_t(int);
sighandler_t signal(int signum, sighandler_t handler);

参数

signum即信号值。后面的handler就是处理这个信号的动作。它的值为:

  • SIG_DFL:默认动作
  • SIG_IGN:忽略该信号(SIGKILL和SIGSTOP无法忽略,因为要保证root的绝对控制权)
  • 信号句柄

信号句柄

信号句柄即捕获函数(这里是函数指针类型),该函数必须是只有一个整型参数,且返回值为void。

信号发送时,如果建立了信号句柄,系统在把控制转移到信号句柄之前有两种做法:

  • 将阻塞后继新的信号直至信号句柄完成为止
  • 首先改变该信号的动作为SIG_DEL(相当于调用signal(signum,SIG_DEL),在执行完一次信号句柄之后,将其恢复为默认动作)

BSD系统使用前者,系统V使用后一种。Linux默认采用BSD的做法,但当设置了特征测试宏_XOPEN_SOURCE时,则采用系统V的做法,此时编译时要这样编译

gcc test.c -D_XOPEN_SOURCE

返回值

返回值是指向信号signum前一次有效动作的指针。它和函数第二个参数类型相同。返回值是:

  • SIG_DFL
  • SIG_IGN
  • 信号句柄指针

可以保存这个值,并且在以后用它作为函数第二个参数再次调用signal(),从而恢复信号原来的动作

如果出错,返回SIG_ERR并设置errno。唯一地错误码(errno)是EINVAL

用法

void (*orig_handler)(int);
orig_handler = signal(SIGUSR1, handler);
if(orig_handler==SIG_ERR){perror("signal");exit(1);
}
if((orig_handler=signal(SIGUSR1,handler))==SIG_ERR){perror("signal");exit(1);
}  
// SIGINT 信号发生之后
signal(SIGINT, orig_handler);
void (*origin_handler)(int);
void handler(int signum){printf("%s\n",strsignal(signum));
}
int main(){if((origin_handler=signal(SIGALRM,handler))==SIG_ERR){perror("signal");exit(1);}   signal(SIGALRM,origin_handler);return 0;
}

pause

在进程没有结束时,进程在任何时间点都可以接受到信号

需要阻塞等待信号时,则可以调用 pause() 函数

函数原型

#include <unistd.h>
int pause(void);

函数返回值

成功:返回 0

失败:返回 -1,并设置 errno

psignal

函数原型

#include <signal.h>
void psignal(int sig, const char *msg);c

描述

打印sig对应信号的描述信息到标准错误流。

参数

sig为信号对应的数。

msg如果不为NULL,那么将msg作为输出消息的前缀。在msg和消息描述之间默认会有一个冒号和一个空格。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python | Leetcode Python题解之第318题最大单词长度乘积
  • 药店管理小程序的设计
  • 半导体芯闻--20240804
  • c++ malloc 过大或者0
  • ESP32人脸识别开发- 基础介绍(一)
  • MySQL-InnoDB引擎
  • 图论① dfs | Java | LeetCode 797,Kama 98 邻接表实现(未完成)
  • 自动气象站:高度自动化、智能化和精准化
  • Ubuntu配置Ngbatis学习环境
  • C++适配器
  • golang国内proxy设置
  • 【每日一题】【枚举】【估计时间复杂度】[蓝桥杯 2024 省 B] 好数 C++
  • 【Python 逆向滑块】(实战五)逆向滑块,并实现用Python+Node.js 生成滑块、识别滑块、验证滑块、发送短信
  • Java 设计模式之单例模式
  • 如何从智联招聘网站快速抓取职位详情?两大技巧揭秘
  • CAP理论的例子讲解
  • ES6简单总结(搭配简单的讲解和小案例)
  • export和import的用法总结
  • Java程序员幽默爆笑锦集
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Netty源码解析1-Buffer
  • Promise初体验
  • quasar-framework cnodejs社区
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Vue组件定义
  • 排序算法学习笔记
  • 前端攻城师
  • 如何设计一个微型分布式架构?
  • 深度学习中的信息论知识详解
  • 【干货分享】dos命令大全
  • elasticsearch-head插件安装
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 移动端高清、多屏适配方案
  • #QT(TCP网络编程-服务端)
  • $.ajax()
  • (12)Linux 常见的三种进程状态
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (八)Spring源码解析:Spring MVC
  • (二) 初入MySQL 【数据库管理】
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (函数)颠倒字符串顺序(C语言)
  • (回溯) LeetCode 46. 全排列
  • (五)activiti-modeler 编辑器初步优化
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .jks文件(JAVA KeyStore)
  • .net core 依赖注入的基本用发
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .Net mvc总结
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET 的静态构造函数是否线程安全?答案是肯定的!