【Linux函数】——Signal 函数
signal设置对某一信号对应动作,signal机制可以被理解成进程的软中断
man 一下
SYNOPSIS
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
DESCRIPTION
The behavior of signal() varies across UNIX versions, and has also var‐
ied historically across different versions of Linux. Avoid its use:
use sigaction(2) instead. See Portability below.
signal() sets the disposition of the signal signum to handler, which is
either SIG_IGN, SIG_DFL, or the address of a programmer-defined func‐
tion (a "signal handler").
If the signal signum is delivered to the process, then one of the fol‐ 第一个参数signum:指明了所要处理的信号类型,它可以取除了SIGKILL和SIGSTOP外的任何一种信号。
lowing happens:
* If the disposition is set to SIG_IGN, then the signal is ignored.
* If the disposition is set to SIG_DFL, then the default action asso‐
ciated with the signal (see signal(7)) occurs.
* If the disposition is set to a function, then first either the dis‐
position is reset to SIG_DFL, or the signal is blocked (see Porta‐
bility below), and then handler is called with argument signum. If
invocation of the handler caused the signal to be blocked, then the
signal is unblocked upon return from the handler.
The signals SIGKILL and SIGSTOP cannot be caught or ignored.
RETURN VALUE
signal() returns the previous value of the signal handler, or SIG_ERR
on error. In the event of an error, errno is set to indicate the
cause.
ERRORS
EINVAL signum is invalid.
实际操作:
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
void my_sig_func(int signo)
{printf("get a signal : %d\n", signo);
}int main(int argc, char **argv)
{int i = 0;signal(SIGIO, my_sig_func);while (1) {printf("Hello, world %d!\n", i++);sleep(2);}return 0;
}
一些常用的Signal :
Signal | Description |
---|---|
SIGABRT | 由调用abort函数产生,进程非正常退出 |
SIGALRM | 用alarm函数设置的timer超时或setitimer函数设置的interval timer超时 |
SIGBUS | 某种特定的硬件异常,通常由内存访问引起 |
SIGCANCEL | 由Solaris Thread Library内部使用,通常不会使用 |
SIGCHLD | 进程Terminate或Stop的时候,SIGCHLD会发送给它的父进程。缺省情况下该Signal会被忽略 |
SIGCONT | 当被stop的进程恢复运行的时候,自动发送 |
SIGEMT | 和实现相关的硬件异常 |
SIGFPE | 数学相关的异常,如被0除,浮点溢出,等等 |
SIGFREEZE | Solaris专用,Hiberate或者Suspended时候发送 |
SIGHUP | 发送给具有Terminal的Controlling Process,当terminal 被disconnect时候发送 |
SIGILL | 非法指令异常 |
SIGINFO | BSD signal。由Status Key产生,通常是CTRL+T。发送给所有Foreground Group的进程 |
SIGINT | 由Interrupt Key产生,通常是CTRL+C或者DELETE。发送给所有ForeGround Group的进程 |
SIGIO | 异步IO事件 |
SIGIOT | 实现相关的硬件异常,一般对应SIGABRT |
SIGKILL | 无法处理和忽略。中止某个进程 |
SIGLWP | 由Solaris Thread Libray内部使用 |
SIGPIPE | 在reader中止之后写Pipe的时候发送 |
SIGPOLL | 当某个事件发送给Pollable Device的时候发送 |
SIGPROF | Setitimer指定的Profiling Interval Timer所产生 |
SIGPWR | 和系统相关。和UPS相关。 |
SIGQUIT | 输入Quit Key的时候(CTRL+\)发送给所有Foreground Group的进程 |
SIGSEGV | 非法内存访问 |
SIGSTKFLT | Linux专用,数学协处理器的栈异常 |
SIGSTOP | 中止进程。无法处理和忽略。 |
SIGSYS | 非法系统调用 |
SIGTERM | 请求中止进程,kill命令缺省发送 |
SIGTHAW | Solaris专用,从Suspend恢复时候发送 |
SIGTRAP | 实现相关的硬件异常。一般是调试异常 |
SIGTSTP | Suspend Key,一般是Ctrl+Z。发送给所有Foreground Group的进程 |
SIGTTIN | 当Background Group的进程尝试读取Terminal的时候发送 |
SIGTTOU | 当Background Group的进程尝试写Terminal的时候发送 |
SIGURG | 当out-of-band data接收的时候可能发送 |
SIGUSR1 | 用户自定义signal 1 |
SIGUSR2 | 用户自定义signal 2 |
SIGVTALRM | setitimer函数设置的Virtual Interval Timer超时的时候 |
SIGWAITING | Solaris Thread Library内部实现专用 |
SIGWINCH | 当Terminal的窗口大小改变的时候,发送给Foreground Group的所有进程 |
SIGXCPU | 当CPU时间限制超时的时候 |
SIGXFSZ | 进程超过文件大小限制 |
SIGXRES | Solaris专用,进程超过资源限制的时候发 |
具体的调用机制是怎么样子的呢?写在后面一篇韦东山学习里面。
【Linux函数】——Signal 函数相关推荐
- linux中signal函数返回值,signal函数、sigaction函数及信号集操作函数
信号是与一定的进程相联系的.也就是说一个进程可以决定在进程中对哪些信号进行什 么样的处理.例如一个进程可以忽略某些信号而只处理其他一些信号另外一个进程还可以选择如何处理信号.总之这些总与特定的进程相联 ...
- linux中signal函数的简单用法
信号是软件中断,它提供了一种处理异步事件的方法,每个信号有个以SIG打头的名字,讲signal函数之前我们先了解下当前系统所支持的信号名称,在linux中敲下kill -l就能查看. [lingyun ...
- Linux中signal函数
signal函数介绍 #include <signal.h> signal(参数1,参数2): 参数1:我们要进行处理的信号.系统的信号我们可以再终端键入kill -l查看(共64个).其 ...
- linux下signal()函数超详细介绍
1. 功能 设置某一信号的对应动作 2. 声明 #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t si ...
- Linux编程signal函数使用
题目: 编写一段程序,使用系统调用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill( )向 ...
- linux signal函数用法,linux信号机制之sigaction构造体浅析,signal 函数,信号捕捉.
来自:http://hi.baidu.com/phenix_yw/blog/item/6eb4ca391d1479f23a87ce19.html 信号安装函数sigaction(int signum, ...
- 理解signal函数
关键字:Unix , Linux, signal, 函数指针,指针函数 在Unix/Linux中signal函数是比较复杂的一个,其定义原型如下: void (*signal(int signo,vo ...
- Linux信号之signal函数
1. 信号概述 何为信号:信号就是由用户.系统或进程发送给目标进程的信息,以通知目标进程中某个状态的改变或是异常. 信号产生:总体来说,其产生的条件有两种,分别是:硬件和软件原因,又称为:硬中断和软中 ...
- Signal ()函数详细介绍 Linux函数
signal()函数理解 在<signal.h> 这个头文件中. signal(参数1,参数2): 参数1:我们要进行处理的信号.系统的信号我们可以再终端键入 kill -l查看(共64个 ...
- 【Linux系列】signal函数详解
Date: 2023.1.18 文章目录 1.介绍 2.如何安装多个处理函数 3.信号列表 转载自:http://imhuchao.com/2300.html signal作用是为信号注册一个处理器. ...
最新文章
- 2019 ACM - ICPC 全国邀请赛(南昌) 题解(9 / 12)
- UESTC 电子科大专题训练 数据结构 J
- 开发中使用UEditor编辑器的注意事项
- php 支付宝付款接口测试
- 为什么说读博是最好的选择?
- 并发-分布式锁质量保障总结
- 网站站长综合seo在线查询工具源码
- 【Salient Object Detection】显著性物体检测资料汇总
- keystone 手动建立租户,用户,角色,服务,端口
- 输油管的布置数学建模matlab,输油管的布置-数学建模.docx
- mysql query cache_MySQL Query Cache开启与否的必要性分析
- 知行EDI系统-入门篇
- 解决鼠标右键中没有新建选项
- hget和get redis_redis hget阻塞 使用redis时遇到的问题 - Redis - 服务器之家
- Spring - Spring事务控制详解与案例总结
- 图像超分之——寻找两张图差异的区域
- Linux下mysql 登录退出及常用命令
- 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m
- 【Linux】(用户不在sudoers文件中……) 添加用户到sudoers
- Scanner类nextLine()和next()的区别和使用方法
热门文章
- 计算机窗口闪屏,热点:电脑显示器闪屏(电脑屏幕闪烁的解决方法)
- 初三学生多会筹备计算机中考考试,2020考生,进入初三你将遇到这些大事,提前做好中考准备...
- <DataWhale>- 语义分割 - RLE编码
- Day 02|11-1:预料部分和java入门
- Docker-Compose部署kafka教程
- 麒麟子惯用框架分享(建议收藏)
- swing java awt_Java awt和Swing的区别
- 日常电脑操作应该注意的十几个小动作以及维护 (引用)
- boot.artboot.oat
- 1000以内猜数游戏