Странное поведение функции C в Unix (HP-UX) - PullRequest
2 голосов
/ 03 июня 2011

У меня есть классический код ветвления для C-программы следующим образом:

int status;


if((pid = fork()) < 0)
{
 printf("SOME fork() ERROR...\n");
}
else if(pid == 0)
{
 //Child stuff
 printf("CHILD CODE\n");
}
else
{
 //parent stuff
 printf("PARENT CODE\n");
 while (wait(&status) != pid);

}

Он компилируется нормально, и я запускал его для выполнения некоторых тестов, пока что-то, чего я не понимаю, вдруг произошло:Терминал я видел только написано "КОД РОДИТЕЛЯ".Как я понимаю, если дочерний процесс не создан, «SOME fork () ERROR ...» и «PARENT CODE» должны отображаться на экране.(Это правда?) Но появляется только последнее.Моей первой мыслью было мммм ... вилка удалась, но ребенок не выполняет свой код ??????????Это вообще возможно?

Спасибо за ваше время и помощь.

Редактировать: переменная status и wait (...) находятся в программе, я печатаю сообщения только для того, чтобы посмотреть, чтопроисходит проще.

Это HP-UX 11

Спасибо всем за ответы.

Ответы [ 4 ]

3 голосов
/ 03 июня 2011

Как объявлено pid?

Возможно ли, что это тип без знака (вместо использования типа pid_t, который должен быть подписан)? В этом случае возвращаемая ошибка от fork() не будет обнаружена как таковая.

0 голосов
/ 04 июня 2011

В коде есть что-то странное: дочерний процесс не завершается.

else if(pid == 0)
{
    //Child stuff
    printf("CHILD CODE\n");
    _exit(EXIT_SUCCESS);
}

Может быть, это решит проблему.

0 голосов
/ 03 июня 2011

Попробуйте добавить fflush(stdout) после printf s.

0 голосов
/ 03 июня 2011

Может быть, вы не уделяете достаточно времени ребенку.Попробуйте добавить waitpid() вызов в родительский код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...