Страницы руководства не говорят много, но это больше зависит от реализации, и я предпочитаю UNIX.
Это обсуждение устраняет большую часть путаницы, особенно раздел комментариев принятого ответа. Но у меня все еще есть одно сомнение.
Как родительский процесс может восстановить свое адресное пространство, когда дочерний процесс с exec * повторно инициализировал все
( exec* manpage says "This causes
the program that is currently being run by the calling process to be
replaced with a new program, with newly initialized stack, heap, and
(initialized and uninitialized) data segments")
Поскольку оба процесса работают параллельно (при условии, что родительский процесс возобновляет выполнение после вызова exec дочерним процессом), то, как им удается получить доступ к кучам / стекам (которые теперь должны отличаться) одновременно. Это возможно только тогда, когда они имеют совершенно разные виртуальные адресные пространства. Но в документе exec нигде не написано, что он создает новое виртуальное адресное пространство.
Означает ли "вновь инициализированный" то же самое?