关于SIGCHLD与SIG_IGN应用。

来源:互联网 发布:不调用淘宝客api 编辑:程序博客网 时间:2024/05/23 14:35

一、SIGCHLD是unix的一种信号。
SIGCHLD信号是子进程结束时,向内核发送的信号。
无论进程是正常终止,还是不正常终止,都会向内核发送SIGCHLD信号。
如果父进程不等待子进程结束,子进程将有可能成为僵尸进程(zombie)从而占用系统资源。因此需要对SIGCHLD信号做出处理,回收僵尸进程的资源,避免造成不必要的资源浪费。
可以用如下语句:
signal(SIGCHLD,(void *)handle);
handle此处代表一个处理 SIGCHLD信号,引起的函数。
但是在一些并发性特别高的服务器端,有时候又需要对此信号进行忽略。因为,每一个子进程终止时都会向内核发送此信号,如果并发性特别多,将影响服务器处理速率。
可以用如下语句
signal(SIGCHLD,SIG_IGN );

      signal(SIGCHLD, SIG_IGN); //忽略SIGCHLD信号,这常用于并发服务器的性能的一个技巧

     //因为并发服务器常常fork很多子进程,子进程终结之后需要服务器进程去wait清理资源。如果将此信号的处理方式设为忽略,可让内核把僵尸子进程转交给init进程去处理,省去了大量僵尸进程占用系统资源。

   

0 0
原创粉丝点击