`
chriszeng87
  • 浏览: 738612 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

signal(SIGCHLD, SIG_IGN)和signal(SIGPIPE, SIG_IGN);

阅读更多
当服务器close一个连接时,若client端接着发数据。根据TCP 协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。 
  根据信号的默认处理规则SIGPIPE信号的默认执行动作是terminate(终止、退出),所以client会退出。若不想客户端退出可以把SIGPIPE设为SIG_IGN 
  如:    signal(SIGPIPE,SIG_IGN); 
  这时SIGPIPE交给了系统处理。 
  服务器采用了fork的话,要收集垃圾进程,防止僵尸进程的产生,可以这样处理: 
  signal(SIGCHLD,SIG_IGN); 交给系统init去回收。 
  这里子进程就不会产生僵尸进程了
 
分享到:
评论

相关推荐

    编写Linux守护进程

    signal(SIGTTOU, SIG_IGN); signal(SIGTTIN, SIG_IGN); signal(SIGTSTP, SIG_IGN); signal(SIGHUP, SIG_IGN); 2. 将程序进入后台执行。使用 fork() 函数使父进程终止,让 Daemon 在子进程中后台执行。这是常说的...

    以实例全面讲解PHP中多进程编程的相关函数的使用

    在上述代码中,可以看到`pcntl_signal(SIGCHLD, SIG_IGN)`的使用,这用于处理子进程的结束。设置`SIGCHLD`信号为`SIG_IGN`意味着父进程忽略子进程的结束,由内核自动回收,防止产生僵尸进程。如果不设置,父进程需要...

    socket 聊天源码

    signal(SIGCHLD,SIG_IGN); while(1){ char ch; printf("server waiting"); client_len=sizeof(client_address); client_sockfd=accept(server_sockfd,(struct sockaddr *)&client;_address,(socklen_t *)&...

    嵌入式\新\信号_结合串口实验.ppt

    `struct sigaction`包含`sa_handler`、`sa_mask`和`sa_flags`等成员,其中`sa_handler`可以设定信号处理函数,可以是用户定义的函数指针,也可以是`SIG_IGN`(忽略该信号)或`SIG_DFL`(使用系统默认处理方式)。...

    Android Init进程对信号的处理流程详细介绍

    如果父进程没有做这种处理,且父进程初始化时也没有调用signal(SIGCHLD, SIG_IGN)来显示忽略对SIGCHLD的处理,这时子进程将一直保持当前的退出状态,不会完全退出。这样的子进程不能被调度,所做的只是在进程列表中...

    嵌入式系统中守护进程的编写及调试

    signal(SIGTTOU, SIG_IGN); signal(SIGTTIN, SIG_IGN); signal(SIGTSTP, SIG_IGN); signal(SIGHUP, SIG_IGN); ``` 2. **后台执行**:通过调用`fork()`函数创建子进程,父进程退出,使得子进程在后台运行。这个过程...

    php多进程并发编程防止出现僵尸进程的方法分析

    如果父进程不关心子进程的结束时间,可以使用`pcntl_signal(SIGCHLD, SIG_IGN)`告诉内核,父进程对此信号不作响应。这样一来,内核会在子进程结束时自动回收资源: ```php declare(ticks = 1); pcntl_signal...

    UNIX高级环境编程-.doc

    信号处理函数可以是忽略信号(SIG_IGN)、使用默认处理(SIG_DFL)或自定义函数。例如,下面的代码展示了如何定义一个信号处理函数`my_signal`: ```c #include #include <signal.h> void my_signal(int signo) {...

    Linux信号在进程控制中的应用.pdf

    SIG_IGN表示忽略信号,SIG_DFL表示恢复默认的信号处理行为。 【信号处理模型】文章中提到了利用信号控制进程运行的三种模型,虽然具体内容未给出,但通常可能包括: 1. **捕获模型**:进程注册一个信号处理函数,当...

    linux环境高级编程4-信号.ppt

    - `handler`参数可以是SIG_IGN忽略信号、SIG_DFL执行系统默认动作,或一个用户定义的处理函数指针。 返回值是之前的信号处理函数地址,这样可以恢复原来的处理方式。 信号处理函数需要一个整型参数,表示接收到的...

    百度2014校园招聘笔试试题-研发工程师笔试题.docx

    - 忽略SIGCHLD信号,即`signal(SIGCHLD, SIG_IGN)`。 - 使用`fork`两次,让中间进程负责清理子进程。 - 主动调用`waitpid`等待子进程结束。 3. **Unix/Linux中使用socket库编写服务器端程序的流程** 服务器端的...

    Linux信号1

    例如,`SIG_DFL`恢复默认行为,`SIG_IGN`忽略信号,而自定义函数可以处理接收到的信号。 信号在实际应用中非常重要,比如服务程序可以响应特定信号进行优雅退出,释放资源。通过设置信号处理函数,我们可以控制程序...

    操作系统实验-进程管理

    每个信号都有默认的处理方式,如SIG_DFL(默认操作,通常是终止进程)和SIG_IGN(忽略信号)。`signal()`函数用于设置信号处理函数,如自定义处理程序或恢复默认行为。需要注意的是,某些信号如SIGKILL是无法被捕获...

    posix_sig.rar_Known

    本文将深入探讨“posix_sig.rar_Known”所涉及的知识点,即`sigemptyset`函数和所有已知的信号。 `sigemptyset`函数是POSIX标准定义的一个与信号处理相关的函数,用于初始化一个信号集为空。在C语言编程中,信号集...

    Linux信号(signal)机制.rar

    2. **忽略信号**:进程可以设置SIG_IGN信号处理器,使得收到信号后不做任何处理。 3. **自定义处理**:通过`signal()`或`sigaction()`函数,可以设置用户定义的信号处理函数。处理函数会在接收到信号时被调用。 **...

Global site tag (gtag.js) - Google Analytics