Jump to content

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

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

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

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

Функции запуска DOS/Windows

[ редактировать ]

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

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

Прототип

[ редактировать ]
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 , за которым следует одна или несколько букв:

Письмо Примечания
л Аргументы командной строки передаются в функцию индивидуально.
v Аргументы командной строки передаются функции в виде массива указателей.
п Использует переменную аргумента PATH для поиска файла, который необходимо выполнить.
и Массив указателей на аргументы среды явно передается дочернему процессу.

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

Имя Примечания
P_OVERLAY Накладывает родительский процесс на дочерний, что уничтожает родителя. Это имеет тот же эффект, что и функции exec*.
П_WAIT Приостанавливает родительский процесс до тех пор, пока дочерний процесс не завершит выполнение (синхронный запуск).
P_NOWAIT, P_NOWAITO Продолжает выполнять вызывающий процесс одновременно с новым процессом (асинхронное создание).
P_DETACH ребенок запускается в фоновом режиме без доступа к консоли или клавиатуре. Вызовы _cwait при новом процессе завершится неудачей (асинхронное создание)

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

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

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

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

name=value

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

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

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

[ редактировать ]

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

Ценить Примечания
-2 Файл не найден
-3 Путь не найден
-11 Неверный файл .exe (для Windows)
-13 Приложение ДОС 4.0
-14 Неизвестный тип .exe (возможно, расширение DOS)

Функции появления POSIX

[ редактировать ]

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

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

См. также

[ редактировать ]
  1. ^ Posix.1-2008 spawn.h
  2. ^ Подсистема Windows для Linux реализует форк. Другие среды POSIX, такие как Cygwin , могут иметь реализацию, но ее использование не рекомендуется из-за различий в модели процесса между POSIX и Windows. Fork не является частью Windows API , и большинство программ Windows не используют эти среды, поэтому у них нет доступа к fork.
  3. ^ Цифровой процесс Марса.h
  4. ^ Microsoft MSDN
  5. ^ Спаун DJGPP *
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: c0037e3b70b0d091e459b50e77335203__1700227920
URL1:https://arc.ask3.ru/arc/aa/c0/03/c0037e3b70b0d091e459b50e77335203.html
Заголовок, (Title) документа по адресу, URL1:
Spawn (computing) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)