Когда вы используете exec
, весь ваш процесс заменяется изображением нового процесса, а текущий перестает существовать.Вместо этого fork
заранее новый процесс (и при необходимости setsid
, чтобы отделить его от его родителя) и , затем exec
новый образ процесса.Разветвленный процесс будет заменен новым образом процесса, и родительский процесс останется живым.Посмотрите на waitpid
, если вы хотите оставить родительский процесс открытым, пока дочерний процесс не выйдет.
РЕДАКТИРОВАТЬ: Для дальнейшего использования, да, setsid
не является переносимым и семантика вокруг fork
значительно различаются.Модель spawn-and-execute все еще существует практически на каждой платформе POSIX и не POSIX, даже если операционная система хоста явно не поддерживает POSIX.