【问题标题】:RPC: Child process that never dieRPC:永不消亡的子进程
【发布时间】:2014-05-08 01:38:33
【问题描述】:

我正在编写一个基于 Linux 操作系统(我使用的是 Ubuntu 12.04)上的 C/C++ RPC 的程序来创建点对点分布式聊天。为了抱怨一些项目请求,我需要执行 fork()。在父进程继续其流程之前,我需要等待子进程死亡:问题出现了。

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

通用的“client1”向“server2”发送ping消息,“server2”以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

......

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      相关资源
      最近更新 更多