Одношаговое порождение процессов
При стандартизации средств одношагового порождения процессов преследовались две основные цели:
- возможность использования на аппаратных конфигурациях без устройства управления памятью и без какого-либо специфического оборудования;
- совместимость с существующими POSIX-стандартами.
Чтобы достичь перечисленных целей, функции posix_spawn() и posix_spawnp() контролируют шесть видов наследуемых сущностей:
- файловые дескрипторы;
- идентификатор группы процессов;
- идентификаторы пользователя и группы процесса;
- параметры планирования;
- маску сигналов;
- способ обработки сигналов, игнорируемых родительским процессом.
Как правило, все открытые дескрипторы родительского процесса остаются таковыми и в порожденном, за исключением тех, у которых установлен флаг FD_CLOEXEC. Кроме того, принимается во внимание объект типа posix_spawn_file_actions_t, который содержит действия по закрытию, открытию и/или дублированию файловых дескрипторов. Для формирования объектов типа posix_spawn_file_actions_t служат функции posix_spawn_file_actions_addclose(), posix_spawn_file_actions_addopen() и posix_spawn_file_actions_adddup2().
За контроль других сущностей, наследуемых при одношаговом порождении процессов, отвечают атрибутные объекты, для формирования и опроса которых служат функции posix_spawnattr_init(), posix_spawnattr_destroy(), posix_spawnattr_getflags(), posix_spawnattr_setflags(), posix_spawnattr_getpgroup(), posix_spawnattr_setpgroup(), posix_spawnattr_getschedparam(), posix_spawnattr_setschedparam(), posix_spawnattr_getschedpolicy(), posix_spawnattr_setschedpolicy(), posix_spawnattr_getsigdefault(), posix_spawnattr_setsigdefault(), posix_spawnattr_getsigmask(), posix_spawnattr_setsigmask().
Реализация одношагового порождения процессов может быть непосредственной, выполненной на уровне ядра операционной системы, и библиотечной, основанной на функциях fork()/exec(). Естественно, надеяться на повышение эффективности по сравнению с двухшаговым порождением имеет смысл только в первом случае.