Prayer

在一般中寻求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

SIGCHLD信号与SIG_IGN处理的使用

Posted on 2009-01-04 19:06 Prayer 阅读(1434) 评论(0)  编辑 收藏 引用 所属分类: LINUX/UNIX/AIX

今天查一下问题,查了很久,终于解决了。有一些心得与大家分享。

signal(SIGCHLD, SIG_IGN); //忽略SIGCHLD信号,这常用于并发服务器的性能的一个技巧
                          //因为并发服务器常常fork很多子进程,子进程终结之后需要
                          //服务器进程去wait清理资源。如果将此信号的处理方式设为
                          //忽略,可让内核把僵尸子进程转交给init进程去处理,省去了
                          //大量僵尸进程占用系统资源。(Linux Only)
some code();
pid = fork();             //生成一个子进程
if (pid < 0)              // error check.
handle_err();
if (pid == 0)
exit (execl(....));      // child process.
else
if (wait(&ret) < 0)
   perror("wait");        //parent process
                                       //在这里wait,都会得No Such process的错误,
                                       //因为子进程终止后,内核会向父进程发送SIGCHLD
                                       //信号,但是上面已将此信号设为忽略,实质上由
                                       //init来接收此子进程的处理。


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理