一:函数sigprocmask
一个进程的信号屏蔽字规定了当前阻塞而不能递送给该进程的信号集。调用函数 sigprocmask可以检测或更改 (或两者 ) 进程的信号屏蔽字。原型如下:
首先,如果oset是一个非空的指针,那么进程的当前信号屏蔽字通过oset返回。
其次,若set是一个非空指针,则参数how指示如何修改当前信号屏蔽字。SIG_BLOCK是或操作,而SIG_SETMASK则是赋值操作。
二:函数sigpending
SIGPENDING返回对于调用进程被阻塞不能递送和当前未决的信号集。该信号集通过set参数返回。
三:函数sigaction
sigaction函数的功能是检查或修改(或者检查和修改)与指定信号相关联的处理动作。此函数取代了UNIX早期版本使用的signal函数。在本书末尾用 sigaction函数实现了signal。
其中,参数signo是要检测或修改其具体动作的信号编号。若act指针非空,则要修改其动作。如果oact指针非空,则系统返回该信号的原先动作。此函数使用下列结构:
四:函数abort
abort函数的功能是使程序异常终止。
该函数将SIGABRT信号发送给调用进程,需要注意,进程不应该忽略此信号。
五:作业控制信号
下面六个信号是和作业控制相关的信号。
• SIGCHLD子进程已停止或终止。
• SIGCONT如果进程已停止,则使其继续运行。
• SIGSTOP停止信号(不能被捕捉或忽略)。
• SIGTSTP交互停止信号。
• SIGTTIN后台进程组的成员读控制终端。
• SIGTTOU后台进程组的成员写控制终端。
大多数应用程序并不处理这些信号——交互式 s h e l l通 常 做 处 理 这 些 信 号 的 所 有 工 作 。 当 键 入 挂 起 字 符 ( 通 常 是 C t r l - Z )时, S I G T S T P 被 送 至 后 台 进 程 组 的 所 有 进 程 。 当 通 知 s h e l l在前台 或后台恢复一个作业时, s h e l l 向作业中的所有进程发送 S I G C O N T 信 号 。 与 之 类 似 的 有 , 如 果 向一个进程递送了 S I G T T I N或 S I G T TO U信号,则根据系统默认,此进程停止,作业控制 s h e l l 了解到这一点后就通知我们。
一个例外是管理终端的进程——例如,vi(1)编辑程序。当用户要挂起它时,它需要能了解到这一点,这样就能将终端状态恢复到vi起动时的情况。另外,当在前台恢复它时,它需要将终端状态设置回所希望的状态,并需要重新绘制终端屏幕。可以在下面的例子中观察到类似 v i 这样的程序是如何处理这种情况的。
在作业控制信号间有某种相互作用。当对一个进程产生四种停止信号(SIGTSTP,SIGSTOP,SIGTTIN或SIGTTOU)中的任意一种时,对该进程的任一未决的SIGCONT信号就被丢弃。与之类似的是,当对一个进程产生SIGCONT信号时,对同一进程的任一未决的停止信号被丢弃。
注意,如果进程是停止的,SIGCONT的默认动作是继续一个进程,否则忽略此信号。 通 常,对该信号无需做任何事情。当对一个停止的进程产生一个SIGCONT信号时,该进程就继续,即使该信号是被阻塞或忽略的也是如此。
08-29
446
04-29
4197
04-25
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交