说明:
本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。
QQ 群 号:513683159 【相互学习】
内容来源:
《Unix环境高级编程》、man 手册
目录:
信号函数
(一)signal()——信号截取【man 2 signal】
1.函数功能:截取系统的信号(signum
),对该信号挂接用户自己的处理函数(handler
)返回该信号之前的处理函数(行为)。
项目 | 说明 |
---|---|
函数原型 | sighandler_t signal(int signum, sighandler_t handler); |
头文件 | signal.h |
参数说明 | signum:整型数(信号) |
handler:函数指针(行为,信号处理函数/信号捕捉函数) (该函数一个整型参数,无返回值,具体如下:) | |
返回值 | 返回以前信号处理程序的指针,该函数无返回值 |
注意 | ①若handler为SIG_IGN表示忽略该信号, ②若handler为SIG_DFL表示系统默认动作 |
2.函数指针指向的函数类型:
/* 信号处理程序的类型 */
typedef void (*__sighandler_t) (int);
3.示例:
【请点击:【Linux】函数示例篇——signal(附前后台切换)】
(二)kill()——将信号发送给进程/进程组【man 2 kill】
1.函数功能:
若pid > 0
,则向pid
进程发送sig
若pid == 0
,则向当前进程所属进程组中的所有进程发送sig
。
若pid == -1
,除init
进程(1)外的所有看得见的进程。
若pid < -1
,发送sig
给进程组-pid
中的所有进程。
若sig == 0
,不会发送任何信号,但被用来检错(一个进程或进程组是否存在)。
项目 | 说明 |
---|---|
函数原型 | int kill(pid_t pid, int sig); |
头文件 | sys/types.h、signal.h |
参数说明 | pid:发送信号的对象 (不同值的效果不相同) |
sig:信号 | |
返回值 | 成功则返回0, 失败则返回-1. |
注意 | 若返回-1并不一定表明该进程不存在,还可能没有权限,要进一步判断宏 |
(三)raise()——允许向进程自身发送信号【man 3 raise】
1.函数功能:发送sig
给自己(raise(signo)
等同于 kill(getpid(),signo)
)
项目 | 说明 |
---|---|
函数原型 | int raise(int sig); |
头文件 | signal.h |
参数说明 | sig:信号 |
返回值 | 成功则返回0, 失败则返回非0 |
注意 |
(四)alarm()——向当前进程发送SIGALRM信号【man 2 alarm】
1.函数功能:设置一个计时器,若时间超时则用于发送SIGALRM
信号。
项目 | 说明 |
---|---|
函数原型 | unsigned int alarm(unsigned int seconds); |
头文件 | unistd.h |
参数说明 | seconds:时间(秒) |
返回值 | 任何预定的警报即将被发送之前的剩余秒数,如果没有预定的警报,则返回0秒 |
注意 | 无法实现多任务的计时器(只能设置一个alarm())) |
2.示例:【Linux】函数示例篇——alarm()与pause()
(五)pause()——挂起等待信号打断【man 2 pause】
1.函数功能:导致调用进程(或线程)处于休眠状态,直到发出信号终止进程或触发信号捕获函数的调用
项目 | 说明 |
---|---|
函数原型 | int pause(void); |
头文件 | unistd.h |
参数说明 | 无 |
返回值 | 只在信号被捕获并且信号捕获函数返回时才返回 |
注意 |
2.示例:【Linux】函数示例篇——alarm()与pause()
(六)abort()——人为制造异常【man 3 abort】
1.函数功能:首先解除阻塞SIGABRT
信号,然后为调用进程引发该信号(就像调用了raise(3)
一样)。导致进程异常终止,发送SIGABRT
信号
项目 | 说明 |
---|---|
函数原型 | void abort(void); |
头文件 | stdlib.h |
参数说明 | 无 |
返回值 | 无 |
注意 |