2013-06-23 4 views
-3

Только один вопрос, когда я fork(), я создал родительский и дочерний процесс. Можно ли завершить мой родитель, пока мой ребенок все еще работает?Нужно подробно объяснять fork и exec

basic на этой диаграмме? Differences between fork and exec

if(!fork()) 
{ 
    //child 
    while(1); 
} 
else 
{ 
    //parent 
    exit(); 
} 

Другой сценарий - это если мой ребенок прекратил действие. мой родитель может получить возвращаемое значение из основного? если да, как я могу получить значение?

В чем разница между exec и execlp?

Наконец, я понимаю, что когда вы выполняете команду, вы перезаписываете память (кучу, стек, текст, данные). В принципе, вызовите новый .exe. Но под ПХД? только PID, PPID остаются, пока состояние и sp все перезаписываются?

+1

Рассмотрите возможность предварительного поиска. И, предполагая, что вы находитесь в системе на основе unix, подумайте о том, чтобы прочитать страницы 'man' – rliu

ответ

1

Когда вы fork, вы создаете совершенно новый и отдельный процесс. Ребенок наследует определенные аспекты, такие как открытые документы и другие вещи. Итак, вы можете выйти из родителя, и ребенок продолжит работу.

Для получения кода выхода и статуса ребенка вы можете использовать pid_t waitpid(pid_t pid, int *status, int options); и интерпретировать его соответствующим образом. На самом деле, чтобы избежать Zombiprocesses, вы все равно должны ждать ребенка.

Семейство exec создает новый исполняемый файл внутри текущего процесса, поэтому PID остается, но состояние выполнения инициализируется.