linux中的信号2——进程如何处理信号?
来源:互联网 发布:淘宝卖医疗器械手续, 编辑:程序博客网 时间:2024/06/05 07:22
以下内容源于朱有鹏《物联网大讲堂》课程的学习整理,如有侵权,请告知删除。
1、signal函数介绍
(1)举例:用signal函数处理SIGINT信号(这个信号由ctrl+c时发出)
- 默认处理
- 忽略处理
- 捕获处理
#include <stdio.h>#include <signal.h>#include <stdlib.h>typedef void (*sighandler_t)(int);void func(int sig){if (SIGINT != sig)return;printf("func for signal: %d.\n", sig);}int main(void){sighandler_t ret = (sighandler_t)-2;//signal(SIGINT, func); // 指定信号SIGINT为绑定处理函数//signal(SIGINT, SIG_DFL);// 指定信号SIGINT为默认处理ret = signal(SIGINT, SIG_IGN);// 指定信号SIGINT为忽略处理if (SIG_ERR == ret){perror("signal:");exit(-1);}printf("before while(1)\n");while(1);printf("after while(1)\n");return 0;}
- signal函数绑定一个捕获函数后,信号发生后会自动执行绑定的捕获函数,并且把信号编号作为传参传给捕获函数;
- signal的返回值在出错时为SIG_ERR,绑定成功时返回信号之前绑定的旧的处理函数。(因为我们用signal为信号绑定了新的处理函数)
(2)signal函数的优点和缺点
- 简单好用,捕获信号常用;
- 绑定处理函数的这种方式,使用signal时,不同版本可能不同。
- 无法简单直接得知之前设置的对信号的处理方法。
2、sigaction函数介绍
(1)两个都是API,但sigaction比signal更具有可移植性
- sigaction可以单独设置新的捕获,或者单独只获取旧的捕获函数(将新的传参为NULL);
- signal函数不能单独获取旧的捕获函数,必须设置新的捕获函数,传参后函数返回才获取旧的捕获函数。
(2)用法关键是2个sigaction指针
阅读全文
0 0
- linux中的信号2——进程如何处理信号?
- Linux — 信号 信号处理和信号处理函数详解
- Linux中的信号处理
- Linux进程间的通信——信号处理
- linux内核中的信号机制--信号处理
- linux进程---信号处理函数
- linux 信号&信号处理
- linux 信号&信号处理
- linux 信号&信号处理
- linux进程如何捕捉信号
- linux进程中的信号屏蔽
- 【Linux】中的进程信号三张表
- 说说Linux中的信号处理和僵尸进程的避免
- 说说Linux中的信号处理和僵尸进程的避免
- Linux中的信号处理原理
- linux中的信号处理机制
- Linux中的信号处理函数
- linux系统中的信号处理
- springboot (5) 与数据库进行交互
- Android消息机制(2)- Message和MessageQueue
- 欢迎使用CSDN-markdown编辑器
- 常用套接字选项(SOL_SOCKET级别)
- 一个例子让你了解Java反射机制
- linux中的信号2——进程如何处理信号?
- PHP微信公众号开发常用功能
- 内存崩溃delete和deleteLater
- python核心编程(一)
- oracel环境变量配置
- 通信例程之GenericApp
- java-封装
- [Easy]C++ 第二期 7道
- 联合权值 【图论】【数学优化】Codevs3728