Общение между родителями и детьми - PullRequest
0 голосов
/ 20 марта 2011

Я нахожусь в программе на C и использую системный вызов fork () для создания дочернего процесса. Как я могу передать значение от child-> parent? Можно ли получить код выхода дочернего объекта где-нибудь в родительском процессе? .. Спасибо

Ответы [ 2 ]

3 голосов
/ 20 марта 2011

Вас могут заинтересовать wait () и waitpid (), см. http://linux.die.net/man/2/waitpid

Вот неблокирующий пример использования waitpid ():

pid_t child;
int child_status, status;

switch(child = fork()) {
        case 0:
                /* child process */
                do_silly_children_stuff();
                exit(42);
        case -1:
                /* fork() error */
                do_some_recovery();
                break;
        default:
                /* parent process */
                do_parenting_stuff();
                break;
}

// busy-wait for child to exit
for (;;) {
        status = waitpid(child, &child_status, WNOHANG);

        switch (status) {
                case -1:
                        /* waitpid() error */
                        break;
                case 0:
                        /* child hasn't exited yet */
                        break;
                default:
                        /* child with PID $child has exited with return value     $child_status */
                        break;

        }
}

Обратите внимание, что я не проверял вышеуказанный код.

Для общего асинхронного межпроцессного взаимодействия вы можете использовать каналы (pipe ()), сокеты, разделяемую память или - будьте осторожны - файлы.

0 голосов
/ 20 марта 2011

Используйте waitpid(pid) в родительском процессе.

pid_t waitpid(pid_t pid, int *status, int options);

ОПИСАНИЕ

Функция waitpid приостанавливает выполнение текущего процесса до тех пор, пока не будет завершен дочерний процесс, указанный в аргументе pid, или пока не будет доставлен сигнал, действие которого заключается в прекращении текущего процесса или вызове функции обработки сигнала. Если дочерний элемент, запрошенный pid, уже вышел к моменту вызова (так называемый процесс «зомби»), функция немедленно возвращается. Любые системные ресурсы, используемые ребенком, освобождаются.

http://linux.about.com/library/cmd/blcmdl2_waitpid.htm

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