gpt4 book ai didi

c - 为什么不能跳出很多子线程fork出来的while循环?

转载 作者:太空宇宙 更新时间:2023-11-04 07:53:43 28 4
gpt4 key购买 nike

在我的程序中,每次用户通过标准输入输入消息时,代码都会读入它,并调用 fork() 来创建一个新的(子)进程。该子进程使用服务器套接字发送数据(用户输入的消息)。

要结束客户端进程,我希望用户键入“quit”。此时,我希望我的代码退出 While(1) 循环,等待所有子进程完成处理(这样就不会留下任何孤立/僵尸进程)。然后在这一点上,当所有子进程都完成并退出时,我希望程序结束。

然而,现在我的代码如下所示,当用户键入“退出”时,尽 pipe 进程成功终止,但循环重新开始。有谁知道我在代码中做错了什么?

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;

最佳答案

您需要检查 “退出” 命令在父级中。

当您 fork 一个新进程时,它独立于父进程运行,并且它们之间不共享任何数据。

如果您想共享数据,请考虑线程。

关于c - 为什么不能跳出很多子线程fork出来的while循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52027764/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com