[英]Overlapped ReadFileEx on Child Process' Redirected STDOUT Never Fires
[英]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.