函数简介篇——信号相关函数

说明
本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。
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
参数说明
返回值
注意

版权声明:本文为weixin_42645653原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。