在运行TCP并发服务器端代码时发现客户端退出时服务器端子进程产生了僵尸进程
服务器端避免僵尸进程的方法
通过忽略SIGCHLD信号,解决僵尸进程signal(SIGCHLD, SIG_IGN)。
通过wait方法,解决僵尸进程signal(SIGCHLD, handle_sigchld);wait(NULL)。
通过waitpid方法,解决僵尸进程signal(SIGCHLD, handle_sigchld);wait(-1,NULL, WNOHANG)。
此时我们通过添加信号函数修改原服务器端代码
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include<signal.h>
void handler(int signo)
{
printf("child exit signal num is %d\n",signo);
wait(NULL);
}
int main(int argc,char * argv[])
{
pid_t pid;
int listenfd,connfd;
struct sockaddr_in ser,clt;
char sendbuf[100]= {"success"},re