В настоящее время я изучаю fork()
и execv()
, и у меня возник вопрос относительно эффективности комбинации.
Мне был показан следующий стандартный код:
pid = fork();
if(pid < 0){
//handle fork error
}
else if (pid == 0){
execv("son_prog", argv_son);
//do father code
Я знаю, что fork()
клонирует весь процесс (копирование всей кучи и т.д.) и что execv()
заменяет текущее адресное пространство на то, что в новой программе. Имея это в виду, не делает ли это очень неэффективным использование этой комбинации? Мы копируем все адресное пространство процесса и сразу же перезаписываем его.
Итак, мой вопрос:
Какое преимущество достигается за счет использования этой комбо (вместо какого-либо другого решения), которое заставляет людей использовать это, даже если у нас есть отходы?