Я пишу программу, основанную на C / C ++ RPC в ОС Linux (я использую Ubuntu 12.04), чтобы создать одноранговый распределенный чат. Для того, чтобы пожаловаться на некоторые запросы проекта, мне нужно сделать вилка (). Мне нужно подождать, пока дочерний процесс не умрет, прежде чем родительский процесс продолжит свою работу: здесь возникает проблема.
Каждый узел состоит из клиента и сервера (где возникают проблемы). Общий обзор ситуации может быть:
универсальный «client1» отправляет пинг сообщение для «server2», который отвечает с понг сообщение; в то же время «client2» отправляет пинг сообщение на «server1», который отвечает с понг сообщение.
Когда я запускаю код, ребенок делает то, что должен, но родитель никогда не обнаруживает, что его ребенок умирает.
Здесь я положил короткий кусок моего очень длинного кода на стороне сервера
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;
}