- 浏览: 1339722 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
chinaxy1:
...
ON DUPLICATE KEY UPDATE重复插入时更新 -
b_l_east:
不一定哦,就算大小相当,in 和 exists的性能也会很大差 ...
mysql查询语句in和exists二者的区别和性能影响 -
llp1990311:
[size=x-small][/size]
如何正确防御xss攻击 -
home198979:
q315506754 写道还是佩服写c的 用其它语言一样可以实 ...
玩转深度优先搜索算法 -
q315506754:
还是佩服写c的
玩转深度优先搜索算法
我们运行如下命令,可看到Linux支持的信号列表:
$ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR213) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+136) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+540) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+944) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+1348) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-1352) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-956) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-560) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-164) SIGRTMAX
列表中,编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会。
下面我们对编号小于SIGRTMIN的信号进行讨论。
1) SIGHUP
本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联。
登录Linux时,系统会分配给登录用户一个终端(Session)。在这个终端运行的所有程序,包括前台进程组和后台进程组,一般都属于这个Session。当用户退出Linux登录时,前台进程组和后台有对终端输出的进程将会收到SIGHUP信号。这个信号的默认操作为终止进程,因此前台进程组和后台有终端输出的进程就会中止。不过可以捕获这个信号,比如wget能捕获SIGHUP信号,并忽略它,这样就算退出了Linux登录,wget也能继续下载。
此外,对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件。
2) SIGINT
程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。
3) SIGQUIT
和SIGINT类似, 但由QUIT字符(通常是Ctrl-\)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。
4) SIGILL
执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段. 堆栈溢出时也有可能产生这个信号。
5) SIGTRAP
由断点指令或其它trap指令产生. 由debugger使用。
6) SIGABRT
调用abort函数生成的信号。
7) SIGBUS
非法地址, 包括内存地址对齐(alignment)出错。比如访问一个四个字长的整数, 但其地址不是4的倍数。它与SIGSEGV的区别在于后者是由于对合法存储地址的非法访问触发的(如访问不属于自己存储空间或只读存储空间)。
8) SIGFPE
在发生致命的算术运算错误时发出. 不仅包括浮点运算错误, 还包括溢出及除数为0等其它所有的算术的错误。
9) SIGKILL
用来立即结束程序的运行. 本信号不能被阻塞、处理和忽略。如果管理员发现某个进程终止不了,可尝试发送这个信号。
10) SIGUSR1
留给用户使用
11) SIGSEGV
试图访问未分配给自己的内存, 或试图往没有写权限的内存地址写数据.
12) SIGUSR2
留给用户使用
13) SIGPIPE
管道破裂。这个信号通常在进程间通信产生,比如采用FIFO(管道)通信的两个进程,读管道没打开或者意外终止就往管道写,写进程会收到SIGPIPE信号。此外用Socket通信的两个进程,写进程在写Socket的时候,读进程已经终止。
14) SIGALRM
时钟定时信号, 计算的是实际的时间或时钟时间. alarm函数使用该信号.
15) SIGTERM
程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出,shell命令kill缺省产生这个信号。如果进程终止不了,我们才会尝试SIGKILL。
17) SIGCHLD
子进程结束时, 父进程会收到这个信号。
如果父进程没有处理这个信号,也没有等待(wait)子进程,子进程虽然终止,但是还会在内核进程表中占有表项,这时的子进程称为僵尸进程。这种情况我们应该避免(父进程或者忽略SIGCHILD信号,或者捕捉它,或者wait它派生的子进程,或者父进程先终止,这时子进程的终止自动由init进程来接管)。
18) SIGCONT
让一个停止(stopped)的进程继续执行. 本信号不能被阻塞. 可以用一个handler来让程序在由stopped状态变为继续执行时完成特定的工作. 例如, 重新显示提示符
19) SIGSTOP
停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别:该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略.
20) SIGTSTP
停止进程的运行, 但该信号可以被处理和忽略. 用户键入SUSP字符时(通常是Ctrl-Z)发出这个信号
21) SIGTTIN
当后台作业要从用户终端读数据时, 该作业中的所有进程会收到SIGTTIN信号. 缺省时这些进程会停止执行.
22) SIGTTOU
类似于SIGTTIN, 但在写终端(或修改终端模式)时收到.
23) SIGURG
有"紧急"数据或out-of-band数据到达socket时产生.
24) SIGXCPU
超过CPU时间资源限制. 这个限制可以由getrlimit/setrlimit来读取/改变。
25) SIGXFSZ
当进程企图扩大文件以至于超过文件大小资源限制。
26) SIGVTALRM
虚拟时钟信号. 类似于SIGALRM, 但是计算的是该进程占用的CPU时间.
27) SIGPROF
类似于SIGALRM/SIGVTALRM, 但包括该进程用的CPU时间以及系统调用的时间.
28) SIGWINCH
窗口大小改变时发出.
29) SIGIO
文件描述符准备就绪, 可以开始进行输入/输出操作.
30) SIGPWR
Power failure
31) SIGSYS
非法的系统调用。
在以上列出的信号中,程序不可捕获、阻塞或忽略的信号有:SIGKILL,SIGSTOP
不能恢复至默认动作的信号有:SIGILL,SIGTRAP
默认会导致进程流产的信号有:SIGABRT,SIGBUS,SIGFPE,SIGILL,SIGIOT,SIGQUIT,SIGSEGV,SIGTRAP,SIGXCPU,SIGXFSZ
默认会导致进程退出的信号有:SIGALRM,SIGHUP,SIGINT,SIGKILL,SIGPIPE,SIGPOLL,SIGPROF,SIGSYS,SIGTERM,SIGUSR1,SIGUSR2,SIGVTALRM
默认会导致进程停止的信号有:SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU
默认进程忽略的信号有:SIGCHLD,SIGPWR,SIGURG,SIGWINCH
此外,SIGIO在SVR4是退出,在4.3BSD中是忽略;SIGCONT在进程挂起时是继续,否则是忽略,不能被阻塞
可靠信号与不可靠信号测试:
#include <stdio.h>
#include <signal.h>
static volatile int signum = 0;
void sigme(int signo)
{
printf("signal received:%d\n", signum++);
sleep(3);
}
int main()
{
signal(SIGUSR1, sigme);
/*signal(SIGRTMIN, sigme);*/
while(1);
return 0;
}
在3秒内向这个程序发送SIGUSR1,只有第一个被接收到,而SIGRTMIN则不会有这样的问题。
发表评论
-
【转载】如何用Linux的命令正确识别cpu的个数和核数
2013-08-20 11:40 1921如何在Linux下cpu的个数和核数呢?googel了一下 ... -
redis2.6.9源码学习---ziplist
2013-05-16 12:05 1795ziplist相比之前分析的z ... -
redis2.6.9源码学习---zipmap
2013-05-02 14:22 0<div class="iteye-blog- ... -
非阻塞connect编程
2013-04-08 17:08 1755非阻塞模式有3种用途 1.三次握手同时做其他的处理。co ... -
redis2.6.9源码学习---adlist
2013-02-07 16:27 1317源码adlist.c adlist.h,先来看看adlist ... -
redis2.6.9源码学习---dict
2013-02-07 11:59 1498redis的hashtable------dict.c ... -
linux c学习笔记----SCTP基础客户/服务编程(setsockopt,sctp_sendmsg等)
2013-01-15 17:53 19702在编程之前先了解一下sctp套接字选项 setsoc ... -
linux c学习笔记----UDP基础客户/服务编程(sendto,recvfrom)
2013-01-14 18:01 53764sendto(经socket传送数据) 相关函数 ... -
linux c学习笔记----select函数详解
2013-01-11 17:25 20332select系统调用是用来让我们的程序监视多个文件句柄(fil ... -
linux c学习笔记----TCP基础客户/服务编程(socket,bind等)
2013-01-10 17:29 28455socket(建立一个socket通信) 相关 ... -
linux c学习笔记----互斥锁属性
2013-01-05 18:37 11525互斥锁属性 使用互斥锁(互斥)可以使线程按顺序执行。通 ... -
linux c学习笔记----线程属性
2013-01-04 17:38 4604一.线程属性 线程具有属性,用pthre ... -
linux c学习笔记----线程同步
2012-12-28 17:49 30221.互斥量 互斥变量用pthead_mutex_t数据类 ... -
linux c学习笔记----线程创建与终止
2012-12-14 17:32 13718进程原语 线程原语 描述 fork p ... -
linux c学习笔记----共享内存(shmget,shmat,shmdt,shmctl)
2012-12-11 18:08 36782shmgetint shmget(key_t key, siz ... -
linux c学习笔记----消息队列(ftok,msgget,msgsnd,msgrcv,msgctl)
2012-12-07 17:46 33413ftok() #include <sys/t ... -
linux c学习笔记----信号(sigaction,sigaddset,sigprocmask)
2012-11-30 16:23 15252sigaction(查询 ... -
linux c学习笔记----信号(alarm,kill,singal)
2012-11-23 11:41 4497alarm(设置信号传送闹钟) 相关函数 ... -
linux c学习笔记----管道文件(pipe,popen,mkfifo,pclose,dup2)
2012-10-29 16:46 19598pipe(建立管道) 相关函数 ... -
linux c学习笔记----目录文件的操作(opendir,readdir,closedir)
2012-10-26 16:11 45664注:为什么要说目录文件?其实在linux中目录也是一种文件,只 ...
相关推荐
Linux信号列表 Linux操作系统中,信号(Signal)是一种异步事件,用于通知进程发生了某些事件,例如键盘中断、进程终止、内存访问错误等。Linux支持的信号列表包括传统UNIX支持的不可靠信号(1-31)和后来扩充的...
Linux信号列表详解 Linux信号列表详解是Linux系统中的一种机制,用于处理异步事件,以便程序可以响应外部事件,如键盘输入、终端断开、子进程结束等。信号机制是Linux系统中的一种基本机制,广泛应用于各种应用程序...
这份名为"Linux信号列表[文].pdf"的文档详细列出了Linux系统中支持的各种信号,这些信号对于软件开发人员理解和调试进程行为至关重要。下面我们将深入探讨其中的部分信号。 1) SIGHUP(挂断):当用户终端连接结束...
在传统的Linux信号列表中,信号编号从1到31被称为“不可靠信号”,这些信号不支持排队,可能会导致信号丢失。而编号32到63则为“可靠信号”(实时信号),支持信号排队,确保信号不会丢失。 #### 二、1~31号信号...
`Linux信号列表.doc`会列出所有标准的Linux信号及其含义,这对于理解和调试多进程环境非常有帮助。 `sigwaitinfo`和`sigtimedwait.doc`涉及的是异步信号处理,这两个函数允许进程等待特定信号的到来,而不是被动地...
### Linux信号说明列表详解 #### 一、引言 在Linux系统中,信号是一种重要的通信机制,用于通知进程发生了一些事件或错误。本篇文章将详细解释由`$ kill -l`命令输出的信号列表,包括每个信号的意义及其应用场景。...
浅析Linux之信号-信号列表
第1章 字符测试函数 第2章 数据转换函数 第3章 内存配置函数 ...附录:编译程序,宏,不定参数,linux信号列表,常见错误代码及原因 pdf文档,400多页,函数大全,每个函数后面都有范例! 是学习linux程序的必备工具!
Linux C 函数库参考手册 第1章 字符测试函数 第2章 数据转换函数 第3章 内存配置函数 第4章 时间函数 第5章 字符串处理函数 第6章 数字计算函数 ...附录D Linux信号列表 附录E 常见错误代码及原因
附录部分包括了编译程序-gcc、宏与函数、不定参数、Linux 信号列表、常见错误代码及原因等信息,进一步完善了手册内容。 请注意,由于OCR扫描技术的原因,文档中部分文字可能存在识别错误或遗漏,需要根据上下文和...
Linux C函数库参考手册详细介绍了在Linux环境下使用C语言...附录中则介绍了编译程序、宏与函数、不定参数、Linux信号列表、常见错误代码及原因等附加信息,对理解和使用C语言在Linux平台的高级特性提供了补充和参考。
常见的信号列表可通过执行`kill -l`命令获得,例如: - `SIGHUP`: 终端挂起或控制进程终止。 - `SIGINT`: 用户中断请求(通常由Ctrl+C产生)。 - `SIGQUIT`: 用户退出请求(通常由Ctrl+\产生)。 - `SIGILL`: 非法...
本文详细介绍了Linux信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。 一、...
#### 四、信号列表 以下是一些常用的信号及其含义: | 信号名 | 信号值 | 默认处理动作 | 发出信号的原因 | |------------|--------|--------------|-----------------------------------------------------------...
- **wait**:一个等待队列头结构,用于存储等待信号量的进程列表。在多处理器系统(SMP)中,还需要一个自旋锁来保护等待队列。 具体的结构定义如下: ```c struct wait_queue_t { struct task_struct *task; // ...
在Linux操作系统中,使用C语言来扫描附近的蓝牙设备并获取RSSI(Received Signal Strength Indicator,接收信号强度指示)是一项常见的任务,特别是在物联网(IoT)和嵌入式系统开发中。RSSI是衡量无线电信号强度的一...
在Linux内核中,PPS模块通常会提供一个设备接口,使得应用程序可以通过标准的系统调用(如open、write、read等)来访问PPS信号。PPS服务可能包括触发中断、设置定时器或者提供精确的时间戳。这些功能对于需要纳秒级...
在Linux环境下,使用QT框架编写连接Wi-Fi的程序是一项实用的技术任务。QT是一个跨平台的C++图形用户界面应用程序开发框架,广泛应用于桌面、移动和嵌入式系统。结合Linux的网络管理工具,如wpa_supplicant或iwconfig...
- **参数**: 包括要执行的程序路径、参数列表和环境变量列表。 - **应用场景**: 在不创建新进程的情况下执行新程序。 ##### 4. `exit` 中止进程 - **功能**: 正常结束当前进程,并传递退出状态给父进程。 - **参数*...