stringtranslate.com

Спаун (вычисления)

Spawn в вычислениях относится к функции, которая загружает и выполняет новый дочерний процесс . Текущий процесс может ожидать завершения дочернего процесса или продолжать выполнять параллельные вычисления . Создание нового подпроцесса требует достаточно памяти, в которой могут выполняться как дочерний процесс, так и текущая программа.

В DOS существует семейство функций spawn , унаследованное Microsoft Windows .

Существует также другое семейство функций создания в необязательном расширении стандартов POSIX . [1]

Функции создания DOS/Windows

Функции spawn DOS/Windows вдохновлены функциями Unix fork и exec ; однако, поскольку эти операционные системы не поддерживают fork, [2] функция spawn была предоставлена ​​в качестве замены для комбинации fork-exec. Однако, функция spawn, хотя и адекватно справляется с наиболее распространенными вариантами использования, не обладает всей мощью fork-exec, поскольку после fork любые настройки процесса, которые выживут после exec, могут быть изменены. Однако в большинстве случаев этот недостаток можно компенсировать, используя API CreateProcess более низкого уровня.

В вызовах spawnl , spawnlp , spawnv и spawnvp дочерний процесс наследует среду родителя. Файлы, которые открыты при вызове spawn, остаются открытыми в дочернем процессе.

Прототип

int spawnl(int mode, char *path, char *arg0, ...);
int spawnle(int mode, char *path, char *arg0, ..., char ** envp);
int spawnlp(int mode, char *path, char *arg0, ...);
int spawnlpe(int mode, char *path, char *arg0, ..., char ** envp);
int spawnv(int mode, char *path, char **argv);
int spawnve(int mode, char *path, char **argv, char ** envp);
int spawnvp(int mode, char *path, char **argv);
int spawnvpe(int mode, char *path, char **argv, char ** envp);

Имена функций

Базовое имя каждой функции — spawn , за которым следует одна или несколько букв:

Режим

Аргумент mode определяет способ запуска дочернего процесса. Значения для mode :

Путь

Аргумент path указывает имя файла программы для выполнения. Только для spawnlp и spawnvp , если имя файла не имеет пути и не находится в текущем каталоге, переменная среды PATH определяет, в каких каталогах искать файл. Строка, на которую указывает argv [0], является именем программы для выполнения.

Командная строка, переданная порожденной программе, состоит из строк символов, от arg0 до argn , в вызове порождения . Принятая максимальная объединенная длина этих строк различается в зависимости от компилятора и составляет от 128 символов в Digital Mars [3] до 1024 в Microsoft Visual C++ [4] или столько, сколько позволяет память в DJGPP. [5] Последний аргумент после argn должен быть указателем NULL.

аргв

Аргумент argv — это массив указателей символов. Последний указатель в массиве должен быть нулевым, чтобы указать конец списка.

envp

Вызовы spawnle , spawnlpe , spawnve и spawnvpe позволяют пользователю изменять среду дочернего процесса, передавая список настроек среды в аргументе envp . Этот аргумент представляет собой массив указателей символов; каждый указатель (за исключением последнего) указывает на строку с нулевым окончанием , определяющую переменную среды. Переменная среды имеет вид:

имя = значение

где name — имя переменной, а value — ее значение. Последний указатель в массиве — null. Если аргумент envp равен null, дочерний элемент наследует настройки среды родителя.

В Microsoft Windows функции spawn* используют LoadModule для запуска порожденного процесса; и если это не удается, делается попытка породить обычный процесс MS-DOS. Если порождается приложение Windows, дескриптор экземпляра можно получить с помощью exec_instancehandleget . Можно указать, как будет отображаться порожденная программа, с помощью функций _exec_showset , _exec_showget и _exec_showreset .

Возвращаемые значения

Возвращаемое значение указывает на статус завершения порожденной программы. Значение, равное нулю, указывает на то, что порожденная программа была выполнена успешно. Положительное значение указывает на то, что порожденная программа была выполнена, но была прервана или завершилась с ошибкой, возвращаемое значение является статусом завершения дочернего процесса. Отрицательное значение указывает на то, что порожденная программа не была выполнена, и устанавливается errno. В Microsoft Windows spawn возвращает отрицательный код ошибки, возвращенный LoadModule для совместимости с библиотекой времени выполнения C. Могут встречаться следующие коды ошибок:

Функции создания POSIX

И posix_spawn(3p)его собрат posix_spawnpможет использоваться в качестве замены fork и exec , но не обеспечивает той же гибкости, что и использование forkи execпо отдельности. Они могут быть эффективными заменами для forkи exec, но их цель — предоставить примитивы создания процессов во встроенных средах, где forkне поддерживается из-за отсутствия динамической трансляции адресов .

История

Метафора spawn , т. е. производить потомство, как в отложении яиц, имела свое раннее применение в операционной системе VMS, теперь OpenVMS (1977). В академических кругах существовали оживленные дебаты между сторонниками форка Unix ( грубая копия структуры памяти, но быстрая) и spawn VMS (надежная конструкция параметров процесса, но медленнее). Эти дебаты возродились, когда механизм spawning VMS был унаследован Windows NT (1993).

Смотрите также

Ссылки

  1. ^ Posix.1-2008 spawn.h
  2. ^ Подсистема Windows для Linux реализует fork. Другие среды POSIX, такие как Cygwin, могут иметь реализацию, но ее использование не рекомендуется из-за различий в модели процесса между POSIX и Windows. Fork не является частью API Windows , и большинство программ Windows не используют эти среды, поэтому не имеют доступа к fork.
  3. ^ Процесс цифрового Марса.h
  4. ^ Microsoft MSDN
  5. ^ Спаун DJGPP*