RPC: дочерний процесс, который никогда не умирает

Я пишу программу, основанную на 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

……

Кто-нибудь понял, почему дочерний процесс кажется всегда живым?

Спасибо.

0

Решение

Вам нужно exit из раздвоенного процесса вот так:

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

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector