Вы можете fork () из pthread, но это может быть сложно сделать правильные детали.Например, разветвленная память процесса будет содержать копии всех условных переменных и мьютексов в исходном процессе.Здесь есть связанный вопрос и некоторые рекомендации о том, как, например, аккуратно освободить все мьютексы, содержащиеся в разных потоках.
разветвляется в многопоточном процессе с большим количеством состояний, хранящихся в потоках
Обратите внимание, что общая идея состоит в том, чтобы fork () выполнить некоторую очистку, а затем выполнить exec ()..
Список асинхронно-безопасных функций, которые можно вызывать между fork и exec, см. на этой man-странице (signal-safety (7))
НоМой общий совет - сделать ваше многопоточное приложение проще - разветвление с большим количеством состояний для обработки в потоках varioius вызывает проблемы.Например, exec () по своему дизайну сохраняет дескрипторы открытых файлов, поэтому, если какой-либо поток имеет дескриптор открытого файла, процесс exec (): ed может излишне переносить этот дескриптор.Утечки ресурсов - это запах кода и, как правило, признак небрежного дизайна.Используйте RAII, если можете.