Как fork () и exec () в этом? - PullRequest
       24

Как fork () и exec () в этом?

0 голосов
/ 14 ноября 2010

Я пишу свою собственную оболочку, но ни одна вилка не дает мой child_pid = 0 ... Что там не так?

 while(true)
    {
        read_command(command);

        if ((child_pid = fork()) == -1)
        {
            fprintf(stderr, "can't fork\n");
            exit(1);
        }
        else if (child_pid == 0) //child
        {
            status=execl("./myShell" command);
        }
        else
        {
            wait(status); //parent
        }
    }

Ответы [ 2 ]

0 голосов
/ 14 ноября 2010

Ваш код в порядке.Добавьте отладочную печать в if(child_pid == 0) и убедитесь, что она не вызывается.Если fork не может создать дочерний элемент, он устанавливает errno, чтобы указать, что произошла ошибка.

0 голосов
/ 14 ноября 2010

Я полагаю, что (child_pid == -1) не введено ... Отцовская (else) ветвь введена дважды (обоими процессами) или как?

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

Я сомневаюсь, что glibc содержит ошибки в вашей системе: я думаю, ваша программа имеет сломанный указатель, который сломал все. Это самая распространенная причина такого необычного поведения.

...