gpt4 book ai didi

c++ - RPC:永不消亡的子进程

转载 作者:太空宇宙 更新时间:2023-11-04 03:59:22 26 4
gpt4 key购买 nike

我正在Linux操作系统(我使用的是Ubuntu 12.04)上基于C/C++ RPC编写一个程序,用于创建点对点分布式聊天。为了提示一些项目请求,我需要执行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 输出为:

.......

CHILD 7320

PROCESS 7320

......

Peer2 输出为:

.......

CHILD 7319

PROCESS 7319

......

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

谢谢。

最佳答案

您需要从 fork 进程中退出,如下所示:

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

关于c++ - RPC:永不消亡的子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23531291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com