繁体   English   中英

为什么不能中断分支很多子线程的while循环?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM