信号
零下10度C_zjw
关注计算机互联网发展的点点滴滴
展开
-
内核实现信号捕捉过程
原创 2021-12-06 00:06:03 · 262 阅读 · 0 评论 -
signal函数-进程对信号的响应
1.signal函数#include void (*signal(int signo, void (*func)(int)))(int);返回:若成功则返回先前的信号处理函数指针,出错则返回SIG_ERR;功能:向内核登记信号处理函数;参数:signo:要登记的信号值 func:a.信号处理函数指针;b.SIG_IGN,忽略信号;c.SIG_DFL,采用系统默认的方原创 2016-12-11 15:03:20 · 2618 阅读 · 0 评论 -
信号发送函数---kill(),raise(),alarm()
信号发送(1)除了内核和超级用户,并不是每个进程都可以向其他的进程发送信号;(2)一般的进程只能向具有相同uid个gid的进程发送信号,或向相同进程组中的其他进程发送信号;(3)常用的发送信号的函数有:kill(),raise(),alarm(),setitimer(),abort()等;kill和raise函数#include int kill(pid_t pid, in原创 2016-12-11 16:39:45 · 935 阅读 · 0 评论 -
信号的基本概念
一.信号及信号来源信号的本质:信号是软件中断,是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信机制,可以看做是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过POSIX实时扩展后,功能更强大了,除了基本的通知功能外,还可以传递附加信息。信号是异步的,表现在:比如进程1向进程2发送一个原创 2016-12-11 11:48:09 · 772 阅读 · 0 评论 -
不可靠信号问题
之前我们在信号的分类中已经讲过什么是不可靠信号,那么不可靠信号所带来的的问题如下:进程每次处理信号后,就将对信号的响应设置为默认动作。在某些情况下,这将导致对信号的错误处理,因此,如果用户不希望这样的操作,那么就要在信号处理函数中结尾再一次调用signal(),重新安装(登记)该信号;信号可能丢失。如果在进程对某个信号进行处理时,这个信号发生多次,对后来的这类信号不排队,那么仅传送该信原创 2016-12-11 21:08:37 · 916 阅读 · 1 评论 -
中断的系统调用
这里的系统调用区别于用户自定义函数。关于慢系统调用:可能会永远阻塞的系统调用;从终端设备、管道或网络设备上的文件读取;向上述文件写入;某些设备上的文件打开;pause和wait系统调用;一些设备的ioctl操作;一些进程间通信函数;1.进程调用“慢”系统调用时,如果发生了信号,内核会重启系统调用;2.进程调用用户自定义函数,如果发生了信号,在信号处理完毕后,会接着从函数原创 2016-12-11 22:33:18 · 530 阅读 · 0 评论 -
函数的可重入性
示例:// 可重入函数int double(int a){ return a*2;}// 不可重入函数void foo(){ static int intarray[28]; static int index; if(index > 19) return; intarray[index] =原创 2016-12-11 23:23:39 · 668 阅读 · 0 评论 -
信号集和信号屏蔽函数
信号集是一个或多个信号的集合,主要用在信号屏蔽函数中。数据类型为sigset_t。信号屏蔽字是指一个进程中当前阻塞而不能送给该进程的信号集。与信号集设置相关的函数有下面几个:#include int sigemptyset(sigset_t *set);功能:set为信号集,将信号集清空,对应将所有信号屏蔽字置0;int sigfillset(sigset_t *set);原创 2016-12-12 12:07:15 · 765 阅读 · 0 评论