RPC:从不死的子进程

时间:2014-05-08 01:38:34

标签: c++ linux fork rpc child-process

我正在编写一个程序,基于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)

{
        static int result = 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

     

PROCESS 7320

     

...

Peer2输出为:

  

.......

     

儿童7319

     

PROCESS 7319

     

...

有没有人知道为什么儿童过程似乎永远存在?

谢谢。

1 个答案:

答案 0 :(得分:0)

您需要从分叉流程中exit,如下所示:

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