Классическая схема запуска процесса в Unix выглядит просто:
fork() создаёт копию текущего процесса, затем execve() заменяет её другой программой.Но для больших приложений это не всегда удобно. Перед
exec() приходится настраивать файловые дескрипторы, credentials, namespaces, ограничения и другие параметры уже созданного процесса. А сам
fork() при этом создаёт его как копию родителя. В 2026 году в Linux обсуждается отдельный process-builder API, который должен позволить собирать новый процесс без такого копирования.1️⃣Что не так с
fork()Условно:
pid = fork();
if (pid == 0) {
// настроить child
execve(...);
}
Новый процесс начинает жизнь как копия родительского состояния, а затем большая часть этого состояния становится ненужной.
Для обычной программы это нормально. Но для серверов и других процессов с большим address space стоимость и сложность такой модели становятся заметнее.
2️⃣Что предлагает Process Builder
Идея - сначала получить практически пустой процесс, а затем последовательно собрать его состояние:
create process
↓
install FDs
↓
set credentials
↓
configure namespaces / limits
↓
exec()
То есть создание процесса превращается из одной операции
fork() в набор явно задаваемых действий.Это особенно интересно для реализации
posix_spawn() и похожих механизмов, где родитель вообще не должен становиться шаблоном нового процесса.3️⃣Почему это интересно kernel-разработчикам
Такой подход позволяет отделить создание процесса от копирования состояния родителя.
В результате можно заранее описать, каким должен быть новый процесс, и передать это описание kernel вместо последовательности
fork() → настройка → exec().При этом проект пока находится на стадии разработки и обсуждения, а не является новым универсальным syscall, который уже можно использовать на обычной системе.
⚡️Идея Process Builder - не просто сделать fork
() быстрее. Это попытка изменить саму модель создания процесса: не копировать существующий процесс и потом переделывать его, а собрать новый из нужных kernel-объектов.
