发信人: tcpip (俺的昵称改了), 信区: cnunix
标  题: Re: 如何消除defunct的进程
发信站: 哈工大紫丁香 (Sun Sep 26 16:00:46 1999), 转信

发信人: cpu (奔腾的心), 信区: Solaris
发信站: 华南网木棉站 (Tue Nov 17 16:21:08 1998), 转信

【 在 yingjian (red) 的大作中提到: 】
: 在UNIX下编多进程程序,有时发现系统中会有状态defunct的进程存在,请问这是如何
: 产生的,如何消除?

因为父进程没有在子进程exit的时候调用wait,所以形成defunct进程。子进
程exit的时候会向父进程发SIGCHLD信号,因此在父进程中可以这样处理:

main( )
{
        ...
        void wait_child( );
        ...
        signal(SIGCHLD, wait_child( )); /* 设置SIGCHLD信号处理函数 */
        ...
}

void wait_child( )              /* 信号处理函数 */
{
        int status;
        wait(&status);          /* 等待子进程退出 */
}

详细man一下signal, wait等调用的用法。

--

        ******************************************************
                
               青岛啤酒,可能是世界上最好的啤酒 。。。 。。。

        ******************************************************
※ 修改:.trueip 于 Sep 26 16:04:30 修改本文.[FROM: dns.mtlab.hit.ed]
--
※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: dns.mtlab.hit.ed]

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: trueip.bbs@melon.gzn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.148毫秒