摘要: sigpending函数返回信号集,其中的各个信号对于调用进程是阻塞的而不能递送,因而也一定是当前未决的。该信号集通过set参数返回。(这些信号是已经产生的信号,但因为信号屏蔽字中对其设置了屏蔽位,从而被阻塞,不能递送给进程的那些信号。注意sigpending返回的信号集与信号屏蔽字的区别。从集合角度来讲,此信号集是当前信号屏蔽字的子集。) #include int sigpending(... 阅读全文
posted @ 2014-01-11 20:19 ITtecman 阅读(2055) 评论(0) 推荐(0) 编辑
摘要: 一个进程的信号屏蔽字规定了当前阻塞而不能递送给该进程的信号集。调用函数sigprocmask可以检测或更改其信号屏蔽字,或者在一个步骤中同时执行这两个操作。 #include int sigprocmask( int how, const sigset_t *restrict set, sigset_t *restrict oset );返回值:若成功则返回0,若出错则返回-1首先,若os... 阅读全文
posted @ 2014-01-11 19:22 ITtecman 阅读(5105) 评论(0) 推荐(0) 编辑
摘要: 我们需要有一个能表示多个信号——信号集(signal set)的数据类型。POSIX.1定义了数据类型sigset_t以包含一个信号集,并且定义了下列五个处理信号集的函数。 #include int sigemptyset(sigset_t *set);int sigfillset(sigset_t *set);int sigaddset(sigset_t *set, int signo)... 阅读全文
posted @ 2014-01-11 18:34 ITtecman 阅读(1145) 评论(0) 推荐(0) 编辑
摘要: 一、不可靠的信号在早期的UNIX版本中,信号是不可靠的。不可靠在这里指的是,信号可能会丢失:一个信号发生了,但进程却可能一直不知道这一点。早期版本中的一个问题是在进程每次接到信号对其进行处理时,随即将该信号动作复位为默认值(经测试,发现我现在用的Red Hat Linux 2.6.18也是这样处理的。)。在描述这些早期系统的编程书籍中,有一个经典实例,它与如何处理中断信号相关,其代码与下面所示的相似:int sig_int(); /* my signal handling function */...signal(SIGINT, sig_int); /... 阅读全文
posted @ 2014-01-11 15:36 ITtecman 阅读(1275) 评论(0) 推荐(0) 编辑
摘要: 使用alarm函数可以设置一个计时器,在将来某个指定的时间,该计时器会超时。当计时器超时时,产生SIGALRM信号。如果不忽略或不捕捉此信号,则其默认动作是终止调用该alarm函数的进程。 #include unsigned int alarm( unsigned int seconds );返回值:0或以前设置的闹钟时间的余留秒数其中,参数seconds的值是秒数,经过了指定的secon... 阅读全文
posted @ 2014-01-11 15:11 ITtecman 阅读(1572) 评论(0) 推荐(0) 编辑
摘要: kill函数将信号发送给进程或进程组。raise函数则允许进程向自身发送信号。 #include int kill(pid_t pid, int signo);int raise(int signo);两个函数返回值:若成功则返回0,若出错则返回-1调用 raise(signo);等价于调用 kill(getpid(), signo);kill的pid参数有4种不同的情况:pid > ... 阅读全文
posted @ 2014-01-11 11:11 ITtecman 阅读(1767) 评论(0) 推荐(0) 编辑
摘要: 当引发信号的事件发生时,为进程产生一个信号(或向进程发送一个信号)。事件可以是硬件异常、软件条件、终端产生的信号或调用kill函数。 在产生了信号时,内核通常在进程表中设置一个某种形式的标志。当对信号采取了这种动作时,我们说向进程递送了一个信号。 在信号产生(generation)和递送(delivery)之间的时间间隔,称信号是未决的(pending)。 进程可以选用信号递送阻塞。如果为进... 阅读全文
posted @ 2014-01-11 10:10 ITtecman 阅读(613) 评论(0) 推荐(0) 编辑
摘要: 进程捕捉到信号并对其进行处理时,进程正在执行的指令序列就被信号处理程序临时中断,它首先执行该信号处理程序中的指令。如果从信号处理程序返回(例如信号处理程序没有调用exit或longjmp),则继续执行在捕捉到信号时进程正在执行的正常指令序列。但在信号处理程序中,不能判断捕捉到信号时进程在何处执行。如果程序正在执行malloc,在其堆中分配另外的存储空间,而此时由于捕捉到信号而插入执行该信号处理程... 阅读全文
posted @ 2014-01-11 09:32 ITtecman 阅读(588) 评论(0) 推荐(1) 编辑