c++ - 子进程如何告诉其父进程创建一个新的子进程?

标签 c++ c fork child-process

亲爱的,

我正在使用 C++ 编写网络服务器应用程序。

启动时,它会创建一个监听器套接字和用户定义数量的子进程( worker ),每个子进程(使用 kqueue、epoll 等)监视监听器以获取新的客户端连接,accept()'ing 它们并创建一个线程来处理响应处理。一旦工作子进程响应了用户定义数量的客户端请求,它必须告诉父进程创建一个新的子进程,等待所有线程完成然后退出。

我的问题是:如果我的父进程中有一个创建子进程的函数 (create_child()),我可以只从子进程中调用它并获得父进程的新子进程吗(期望的结果),或者它会创造一个 child 的 child ?前任。 (伪代码):

void create_child() {
    //create child process
}

int main()
{
    //do things

    if(fork() == 0) {
        //do things

        create_child(); //is result a child of parent or child of child?
    }
}

我不想使用管道,我想避免它的开销,但请告诉我它是否是唯一的解决方案。我目前这里没有 Linux 系统来编写一个简单的程序并测试会发生什么,但是在我的搜索中我在某处读到它会创建子进程的子进程。那么,如何从另一个子项中创建父项的子项

如果变得难以理解,我很抱歉,我写这个问题时有点困了。预先感谢您的帮助。

最佳答案

通常,当您执行fork 时,并希望在父进程和子进程之间(或者一般的进程之间,想一想)进行通信,您可以使用pipe。 :

    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>

    main()
    {
            int     fd[2];
            pid_t   childpid;

            pipe(fd);

            if((childpid = fork()) == -1)
            {
                    perror("fork");
                    exit(1);
            }
            .
            .
    }

child 和 parent 可以使用(惊喜!)readwrite 系统调用,使用 fd 进行读写。 (如果通信应该是单向的,那么顺便说一下,一些 fd 应该被关闭。)

一旦您进行了通信,您就可以设计任何您希望子进程与父进程通信的协议(protocol),包括跨越其他进程。

关于c++ - 子进程如何告诉其父进程创建一个新的子进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35145868/

相关文章:

c++ - 双摆单PID

c++ - 纹理重复

c++ - 使用 POCO C++ 通过 TCP 连接发送和接收 OOB 数据

c++ - 是否有一种简单的定时锁定算法可以避免多个互斥体上的死锁?

c - 如何处理 fork-exec 上的共享内存和共享信号量?

perl - 在Perl中重定向输出时fork exec杀死的问题

c - 用C打开文件,如果存在则覆盖

C 数组排列与宏

c - 使用修改后的 ls 执行另一个程序

c - C 中的 fork() 和 POSIX 中共享内存的内存表示