当前位置: 技术问答>linux和unix
客户端终止,服务器子程序退出的问题。
来源: 互联网 发布时间:2015-12-15
本文导语: 在客户端终止时(CTRL-C),客户端发送FIN到服务器,服务器子程序收到后,跟踪程序执行,发现服务器子程序会从read阻塞返回,然后停在write处。但是,服务器父进程却收到了SIGCHLD,也就是说,服务器子程序退出了,...
在客户端终止时(CTRL-C),客户端发送FIN到服务器,服务器子程序收到后,跟踪程序执行,发现服务器子程序会从read阻塞返回,然后停在write处。但是,服务器父进程却收到了SIGCHLD,也就是说,服务器子程序退出了,为什么?请不吝赐教。
if(fork()==0)//服务器子进程
{
close(listenfd);
while(1)
{
read(connfd,buf,1024);
write(connfd,buf,1024);
}
exit(0);
}
signal(SIGCHLD,sighandle);//服务器父进程
if(fork()==0)//服务器子进程
{
close(listenfd);
while(1)
{
read(connfd,buf,1024);
write(connfd,buf,1024);
}
exit(0);
}
signal(SIGCHLD,sighandle);//服务器父进程
|
子进程write的时候失败,收到信号SIGPIPE,你没有捕获改信号,默认是终止.子进程终止了,会向父进程发送信号SIGCHLD.
你可以捕获SIGPIPE,避免对方关闭socket导致的不情愿的退出.
你可以捕获SIGPIPE,避免对方关闭socket导致的不情愿的退出.