Поймите, что "после ветвления могут быть изменены любые параметры процесса, которые выживут в exec" - PullRequest
2 голосов
/ 01 августа 2011

Цитируется из Википедии:

Функции появления Microsoft Windows основаны на Unix-функциях fork и exec;однако, поскольку Windows не поддерживает fork (по крайней мере, в Win32 API; среды эмуляции POSIX, такие как Cygwin или SFU), функция spawn была предоставлена ​​в качестве замены комбинации fork-exec.

Тем не менее, функция spawn, хотя и адекватно работает с наиболее распространенными вариантами использования, испытывает недостаток в полной мощности fork-exec, так как после fork любые параметры процесса, которые выживут exec, могут быть изменены .Однако в большинстве случаев этот недостаток можно устранить с помощью более низкого уровня API CreateProcess.

Мне было интересно, как понять причину, по которой Windows spaw () слабее, чем Unix fork-exec: "после ветки могут быть изменены любые параметры процесса, которые выживут в exec"?

Когда происходит «изменение» некоторых параметров процесса: между fork и exec или после exec?

Будут ли в дочернем процессе переменные среды, унаследованные от его родительского процесса, exec exec?

Есть ли примеры?

Спасибо и всего наилучшего!

1 Ответ

1 голос
/ 01 августа 2011

«Изменение» произойдет между fork () и exec ().Довольно много состояний процесса наследуется через exec, см. http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html.В частности, файловые дескрипторы наследуются (если они не имеют установленного бита close-on-exec).

Обычно для вызова каналов и дескрипторов файлов перенаправления используются семейство вызовов pipe () и dup ().Например, подключение стандартного ввода и вывода дочернего процесса к каналу, чтобы родительский процесс мог взаимодействовать с дочерним процессом.

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