[英]Why can not break out of the while loop in which many child threads are forked?
在我的程序中,每次用户通过stdin键入一条消息时,代码都会读入该消息,然后调用fork()创建一个新的(子)进程。 该子进程使用服务器套接字发送数据(用户输入的消息)。
为了结束客户端进程,我希望用户键入“ quit”。 在这一点上,我希望我的代码退出While(1)循环,等待所有子进程完成处理(因此不留下任何孤立/僵尸进程)。 然后在这一点上,当所有子进程都已完成并退出时,我希望程序结束。
但是现在,使用我的代码,如下所示,当用户键入“ quit”时,尽管子进程成功终止,循环仍会重新开始。 有谁知道我在代码中做错了什么吗?
int status = 0;
while (1) {
// Read request from standard input
printf("Enter a message: ");
memset(out_buffer, 0, BUFFER_SIZE);
fgets(out_buffer, BUFFER_SIZE - 1, stdin);
out_buffer[strcspn(out_buffer, "\r\n")] = 0;
// Spawn new process to handle new client
if ((pid = fork()) == -1) {
printf("[-]Error spawning child process for new client.\n");
continue;
}
// Child process
else if (pid == 0) {
// ...
if (input_status == -2) {
printf("[-]Disconnected from server.\n");
close(socket_fd);
termination_call = 1;
exit(0);
}
}
if (termination_call == 1) {
printf("[-]Client terminating...\n");
break;
}
}
// Wait for all child processes to exit
while ((wpid = wait(&status)) > 0);
return 0;
您需要在parent中检查"quit"
命令。
派生新进程时,它独立于父进程运行,并且它们之间没有共享数据。
如果要共享数据,请考虑使用线程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.