繁体   English   中英

RPC:子进程永不消亡

[英]RPC: Child process that never die

我正在编写一个程序,该程序基于linux OS上的C / C ++ RPC (我使用的是Ubuntu 12.04),以创建对等分布式聊天。 为了抱怨一些项目要求,我需要做一个fork() 我需要等待子进程终止,然后父进程才能继续其流程:这里出现了问题。

每个对等方都由客户端和服务器(出现问题的地方)组成。这种情况的一般概述可能是:

通用的“ client1”向“ server2”发送一个ping消息,并以pong消息回答; 同时,“ client2”向“ server1”发送ping消息,并以pong消息进行应答。

当我运行代码时,孩子会做它必须做的事情,但父母却从未发现孩子死亡。

在这里,我放了很长的服务器端代码的一小段

int *chatline_0_svc(struct message *msg, struct svc_req *req)

{
静态int结果= 1;

.......

switch(msg->msg_type)
{
    .......
    case ping:{ 
            int status;
            pid_t pidfork = fork();

            if(pidfork == 0)
            {
                //CHILD
                cout << "CHILD " << getpid() << endl;
            }
            else
            {
                waitpid(pidfork, &status, 0);
                cout << "PARENT" << endl;

                                    .......

            }
            break;
          }
                      .......
    }
cout << "PROCESS " << getpid() << endl;
return &result;

}

Peer1的输出为:

.......

儿童7320

过程7320

......

Peer2的输出为:

.......

儿童7319

过程7319

......

有没有人知道为什么子进程似乎总是活着的?

谢谢。

您需要像这样从分叉的过程中exit

if(pidfork == 0)
{
    //CHILD
    cout << "CHILD " << getpid() << endl;
    _exit(EXIT_SUCCESS); // or return
}
else
{
    waitpid(pidfork, &status, 0);
    cout << "PARENT" << endl;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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