上一页 1 ··· 24 25 26 27 28 29 30 31 32 ··· 59 下一页
摘要: 我们需要有一个能表示多个信号——信号集(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) 编辑
摘要: UNIX系统的信号机制最简单的接口是signal函数。signal函数的功能:为指定的信号安装一个新的信号处理函数。#include void (*signal(int signo, void (*func)(int)))(int);复杂原型分开看:void (*signal( int signo, void (*func)(int) ) )(int);函数名 :signal函数参数 :int signo, void (*func)(int)返回值类型:void (*)(int);signo参数是信号名(参见:http://www.cnblogs.com/nufangrensheng/p/35 阅读全文
posted @ 2014-01-10 22:16 ITtecman 阅读(18421) 评论(1) 推荐(1) 编辑
摘要: 信号是软中断,它提供了一种处理异步事件的方法。 首先,每个信号都有一个名字。这些名字都以三个字符SIG开头。 在头文件中,这些信号都被定义为正整数(信号编号)。 实际上,实现将各信号定义在另一个头文件中,但是该头文件又包括在中。通常,若应用程序和内核两者都需使用同一定义,那么就将有关信息放置在内核头文件中,然后用户级头文件再包括该内核头文件。 不存在编号为0的信号。(kill函数对信号编号... 阅读全文
posted @ 2014-01-10 17:52 ITtecman 阅读(1712) 评论(0) 推荐(2) 编辑
摘要: 一个其父进程已终止的进程称为孤儿进程(orphan process),这种进程由init进程“收养”。 整个进程组也可以成为“孤儿”。 孤儿进程组(orphan process group):该组中每个成员的父进程要么是该组中的一个成员,要么不是该组所属会话的成员。 对孤儿进程组的另一种描述:一个进程组不是孤儿进程组的条件是,该组中有一个进程,其父进程属于同一会话的另... 阅读全文
posted @ 2014-01-10 16:22 ITtecman 阅读(371) 评论(0) 推荐(1) 编辑
摘要: 作业控制,它允许在一个终端上启动多个作业(进程组),它控制哪一个作业可以访问该终端,以及哪些作业在后台运行。作业控制要求下面三种形式的支持:(1)支持作业控制的shell。(2)内核中的终端驱动程序必须支持作业控制。(3)内核必须提供对某些作业控制信号的支持。从shell使用作业控制功能角度讲,用户可以在前台或后台启动一个作业。一个作业只是几个进程的集合,通常是一个进程的管道线。例如:vi main.c在前台启动了只有一个进程组成的一个作业。命令:pr *.c | lpr &make all &在后台启动了两个作业。这两个后台作业调用的所有进程都在后台运行。当启动一个后台作业时 阅读全文
posted @ 2014-01-10 15:05 ITtecman 阅读(772) 评论(0) 推荐(0) 编辑
上一页 1 ··· 24 25 26 27 28 29 30 31 32 ··· 59 下一页