vfork()
можно использовать только для разветвления, а затем вызвать exec
или exit
. Кроме того, vfork()
будет блокировать родительский процесс, пока дочерний процесс не вызовет _exit
или exec
, что почти наверняка не соответствует желаемому поведению.
Причина этого в том, что vfork()
не делает никаких копий каких-либо данных, включая стек, для нового процесса. Таким образом, все совместно используются, и очень легко случайно изменить то, что родительский процесс не может обработать. Поскольку данные совместно используются без копий, родительский процесс не может продолжить работу одновременно с дочерним процессом, поэтому он должен дождаться, пока дочерний процесс _exit
или вызовет exec
, чтобы он больше не использовал данные при запуске родительского процесса изменить его.