◎为何出现僵尸进程◎请教

gimser 2003-10-16 02:56:25
如下代码

#indlue ....

#define....

int main(int argc, char * argv[])
{
int sockfd, new_fd;
pid_t pid; // pid
int len;
char msg[BUFSIZE] = {0};

struct sockaddr_in my_addr;
struct sockaddr_in their_addr;
int sin_size;

sockfd = socket(AF_INET, SOCK_STREAM, 0);

my_addr.sin_port = htons(MYPORT);
my_addr.sin_family = AF_INET;
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);

bzero(&(my_addr.sin_zero),8);

bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr));

listen(sockfd, BACKLOG);

while(1)
{
sin_size = sizeof(struct sockaddr_in);

new_fd = accept(sockfd,(struct sockaddr *)&their_addr, &sin_size);
if((pid=fork()) == 0)
{
close(sockfd);
recv(new_fd, msg, BUFSIZE, 0);
printf("STRINGS: %s\n", msg);

close(new_fd);
exit(0);
}
else
close(new_fd);
}

close(sockfd);
exit(0);
}

执行完 开始接受后
接收到一条
系统出现一个
[ThreadListen <defunct>]
怎么办 啊
...全文
33 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ecfa 2003-10-16
  • 打赏
  • 举报
回复
查查一些书吧,看看linux进程树中,父进程和子进程之间的关系。
比如,到底什么是僵尸,信号等等。基本功嘛。。
dchg2000 2003-10-16
  • 打赏
  • 举报
回复
ari 2003-10-16
  • 打赏
  • 举报
回复
父进程要给子进程收尸的,
使用waitpid.

signal( SIGCHLD, sig_chld );
....

static void sig_chld(int signo)
{
pid_t pid;
int stat;
while( (pid=waitpid(-1, &stat, WNOHANG)) > 0 );

return;
}

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧