使用system函数时应该忽略两个信号
发布时间:2013-11-02 15:20:00 所属栏目:Linux 来源:站长网
导读:在8.13节,我们展示了一个system函数的实现。然而,那个版本没有处理信号。POSIX.1要求system忽略SIGINT和SIGQUIT并阻塞SIGCHLD。在展示正确处理这些信号的版本
|
在8.13节,我们展示了一个system函数的实现。然而,那个版本没有处理信号。POSIX.1要求system忽略SIGINT和SIGQUIT并阻塞SIGCHLD。在展示正确处理这些信号的版本之前,我们看下为什么需要担心这些信号的处理。
下 面的代码使用了8.13节的system版本来调用ed编辑器。(这个编辑器作为UNIX系统的一部分已经有很长时间了。我们在这里使用它是因为它是一个 捕获中断和退出信号的交互式程序。如果我们调用一个外壳并输入中断符,那么它捕获这个中断符并打印一个问号。ed程序也设置了退出信号的布署以便它被忽 略。)
<span style="font-size:18px;"><strong>#include <signal.h>
static void
sig_int(int signo)
{
printf("caught SIGINTn");
}
static void
sig_chld(int signo)
{
printf("caught SIGCHLDn");
}
int
main(void)
{
if (signal(SIGINT, sig_int) == SIG_ERR) {
printf("signal(SIGINT) errorn");
exit(1);
}
if (signal(SIGCHLD, sig_chld) == SIG_ERR) {
printf("signal(SIGCHLD) errorn");
exit(1);
}
if (system("/bin/ed") < 0) {
printf("system() error");
exit(1);
}
exit(0);
}</strong></span>
上面的代码同时捕获了SIGINT和SIGCHLD。运行结果为:
(编辑:佛山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
热点阅读

