Вопрос о EXECV и обработке семейных отношений

StackOverflow https://stackoverflow.com/questions/3527682

  •  30-09-2019
  •  | 
  •  

Вопрос

После того, как процесс вилок и разветвленный сын вызывает Execv, результат все еще сын отца?

Это было полезно?

Решение

Форк создает новый процесс, называемый ребенком родителя ..... EXEC заменяет текущую программу запущенной программы с помощью процесса Exec'd и, следовательно, остается дочерним процессом родителя ...

Другие советы

Да. execv не создает новый процесс - поэтому вам нужно сначала раскошелиться.

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

Вы на правильном пути. В основном Вилка (2) System Call In Old Unix создал копию процесса, который раздвоился, с новым PID и новым стеком процесса, копируя пространство памяти для этого. А исполнительный Загружает существующий процесс новым изображением. Вы можете увидеть одну версию этого в exec Операция в большинстве оболочек - это не желаемое изображение в процессе, который был занят оболочкой.

Когда вы растет процесс, системный вызов вилки вернул PID нового процесса, если вы родитель, или 0, если вы ребенок. Дочерний процесс также наследует все дескрипторы открытых файлов, в частности 0,1 и 2, которые чаще известны как Stdin, Stdout и Stderr.

(Поп -викторина: как вы думаете, что оболочка управляет перенаправлением, например, с >?)

Более современные варианты Unix с большими адресными пространствами (у оригинального Unix было всего 64 тыс. Всего!) Вариант реализации под названием под названием Vfork Это только копирует необходимое подмножество процесса, чтобы начать работу, и зависит от менеджера памяти, чтобы привлечь остальное, если это необходимо. Поскольку в большинстве случаев Fork сразу же следует EXEC, который в любом случае должен загрузить новое изображение, это значительная оптимизация.

Маха делает это еще дальше; Когда вы создаете новый Pprocess, ничего не скопируется, кроме того, что вам нужно для контекста выполнения; Изображение точно такое же. Копирование происходит только тогда, когда процесс меняет местоположение в памяти, после чего страница, содержащая это местоположение. Это называется «Копировать на записи» и почти оптимально.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top