Файловый дескриптор - родитель и раздвоенный ребенок - PullRequest
0 голосов
/ 29 мая 2011

Я пишу программу cgi для моего небольшого веб-сервера.Затем эта программа разветвляется, чтобы создать ребенка.Насколько я знаю, parent и его потомки используют один и тот же файловый дескриптор, поэтому я ожидал увидеть выходные данные потомка, чего на самом деле не было.

Программа cgi в основном такова:

printf("Content-Type: text/plain;charset=us-ascii\n\n");

printf("parent");

pid=fork();

if(pid==0) printf("child");

wait(null);

То, что я ожидал, это и "родитель", и "ребенок", но на самом деле это был просто "родитель".Может ли кто-нибудь помочь мне объяснить?Цени любую помощь

1 Ответ

0 голосов
/ 29 мая 2011

Вы должны дважды проверить, что дочерний процесс действительно создается. Начиная с здесь вы должны проверить, что возвращенный pid не равен -1, и если да, проверьте errno для получения дополнительной информации:

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

Upon successful completion, fork() shall return 0 to the child process
and shall return the process ID of the
child process to the parent process.
Both processes shall continue to
execute from the fork() function.
Otherwise, -1 shall be returned to the
parent process, no child process shall
be created, and errno shall be set to
indicate the error.

ОШИБКА

The fork() function shall fail if:

[EAGAIN]
    The system lacked the necessary resources to create another
    process, or the system-imposed limit
    on the total number of processes under
    execution system-wide or by a single
    user {CHILD_MAX} would be exceeded.


    The fork() function may fail if:

[ENOMEM]
    Insufficient storage space is available.

Если вышеперечисленное не поможет, вероятно, было бы полезно, если бы вы могли предоставить больше информации об операционной системе, на которой вы пытаетесь это сделать, но я думаю, что это довольно стандартный код для большинства платформ.

...