加入收藏 | 设为首页 | 会员中心 | 我要投稿 佛山站长网 (https://www.0757zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

使用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。运行结果为:
$ ./a.out
a (添加文本命令)
Here is one line of text
. (终止添加模式)
1,$p (从第一行开始打印)
Here is one line of text
w temp.foo (把缓冲写入文件)
25 (写了25个字节)
q (退出)
caught SIGCHLD

(编辑:佛山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读