relibc получила posix_spawn и posix_spawnp — запуск процессов без fork и exec
15.06.2026В relibc реализованы posix_spawn и posix_spawnp с полным набором структур для действий над файлами и атрибутов. Это стандартный способ запустить процесс в одном вызове, без пары fork плюс exec.
Зачем нужен posix_spawn
Классический запуск процесса — это fork, затем в дочернем процессе exec. Между ними есть тонкое место: после fork в дочернем процессе работает только один поток, и любая функция, которая берёт блокировку или выделяет память из общего состояния родителя, может привести к тупику. На практике это даёт редкие и трудные зависания — как правило, при многопоточном родителе.
posix_spawn снимает проблему: он выполняет обе операции внутри реализации libc, где всё необходимое уже подготовлено. Родитель не переключается в однопоточный режим.
Разница между двумя функциями — в поиске программы: posix_spawnp ищет исполняемый файл по переменной PATH, как это делает оболочка, а posix_spawn требует полный путь.
Что реализовано
Обе функции, а также вспомогательные структуры: posix_spawn_file_actions_t — список действий над файлами, которые нужно сделать до запуска (перенаправить вывод, закрыть дескриптор), и posix_spawnattr_t — атрибуты нового процесса. Список действий сделан итератором поверх связного списка, чтобы не тянуть вниз лишние типы.
Работу продолжили и починили: отдельно поправлены запуск программы по относительному пути, запуск сценария через sh и устранено лишнее выделение памяти при разборе строк.
Почему это касается Rust
В стандартной библиотеке Rust есть только Command, который внутри полагается на posix_spawn, когда он доступен. То есть до этой правки std::process::Command на Redox шёл другим путём, с его собственными особенностями. С появлением функции путь упрощается и уходит классический источник зависаний.
Второй потребитель — код, который запускает подпроцессы из C-библиотек: редакторы, билд-системы, тестовые раннеры.
Оригинал
Коммиты в репозитории redox-os/relibc: Add posix_spawn and posix_spawnp for RedoxOS от 15 июня, Fix posix_spawn various issues от 20 июня и Fix posix_spawn launching sh script от 23 июня 2026 года
Упоминаний: 1 · Просмотров: 6