我正在编写一个程序,基于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
...
有没有人知道为什么儿童过程似乎永远存在?
谢谢。
答案 0 :(得分:0)
您需要从分叉流程中exit
,如下所示:
if(pidfork == 0)
{
//CHILD
cout << "CHILD " << getpid() << endl;
_exit(EXIT_SUCCESS); // or return
}
else
{
waitpid(pidfork, &status, 0);
cout << "PARENT" << endl;
}