服务器进程fork()两次的原因

来源:互联网 发布:淘宝上iphone裸机 编辑:程序博客网 时间:2024/05/14 21:25

作为一个服务器进程,是需要不断运行的,不能够 退出的进程,但是如何保证服务器进程运行过程中不会因为子进程而影响服务器的性能呢?这里来阐述服务器进程父进程创建子进程之后会带来的一些问题,以及如何解决这些问题。

服务器进程fork()一次,产生一个子进程,作为工作进程,当这个工作进程运行结束之后,向父进程发送SIGCHILD信号,默认情况下,父进程会忽略这个信号,除非采用signal()信号处理函数对子进程的资源进行回收,否则,此时工作进程就会成为一个僵尸进程,僵尸进程虽然不占用系统的任何资源,但是过多的僵尸进程会影响系统的性能。那么怎么才能让工作进程不成为僵尸进程呢?此时在创建一次fork(),让第一次创建的子进程成为第二次fork()的父进程,然后创建的子进程作为工作进程,此时让工作进程的父进程退出,计算机系统中当父进程退出,子进程未退出,此时的子进程成为了孤儿进程,那么他会被init进程收养,当孤儿进程退出时,会由init进程来回收资源。综上所述,对于一个一直运行的服务器进程,要产生工作进程,采用两次fork()可以避免僵尸进程的产生,能够保证系统性能。


原创粉丝点击