UNIX网络编程——使用waitpid处理僵尸进程(TCP客户/服务器优化1)

本文探讨了在UNIX网络编程中如何使用waitpid函数处理僵尸进程,以优化TCP客户/服务器应用。讲解了僵尸进程、信号处理、wait与waitpid函数的异同,并强调了waitpid在处理多个并发连接时避免信号丢失的重要性,同时提出了TCP服务器的优化建议,包括在SIGCHLD信号处理中使用waitpid清理僵死进程。
摘要由CSDN通过智能技术生成

1、僵尸进程

     僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。

   unix提供了一种机制可以保证只要父进程想知道子进程结束时的状态信息, 就可以得到。这种机制就是(僵尸进程存在的意义): 在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。 但是仍然为其保留一定的信息(包括进程号the process ID,退出状态the termination status of the process,运行时间the amount of CPU time taken by the process等)。直到父进程通过wait / waitpid来取时才释放。 但这样就导致了问题(僵尸进程的危害),如果进程不调用wait / waitpid的话,那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。

2、信号处理:

      SIGCHLD信号是内核在任何一个进程终止时发给它的父进程的一个信号。
      通过调用sigaction函数设定一个信号的处置。
           A. 捕获信号,提供对特定信号的信号处理函数;
           B. 把某个信号的处置设定为SIG_IGN,来忽略它;(SIGKILL、SIGSTOP不能被忽略)

           C. 把某个信号的处置设定为SIG_DEF,来启动它的默认值;(SIGCHLD、SIGURG均默认被忽略)


 3、wait函数和waitpid函数

&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值