Введение
Выполнение файла (функция библиотеки и/или системный вызов) – функция операционной системы компьютера. В информатике, exec – это функциональность операционной системы, которая запускает исполняемый файл в контексте уже существующего процесса, заменяя текущий исполняемый файл. Эта операция также называется подменой. Она особенно важна в Unix-подобных системах, хотя существует и в других операционных системах. Поскольку новый процесс не создается, идентификатор процесса (PID) не изменяется, но машинный код, данные, куча и стек процесса заменяются кодом, данными, кучей и стеком новой программы. Вызов exec доступен для многих языков программирования, включая компилируемые и некоторые скриптовые языки. В командных интерпретаторах ОС встроенная команда заменяет процесс оболочки указанной программой.
the computer operating system function
In computing, exec is a functionality of an operating system that runs an executable file in the context of an already existing process, replacing the previous executable. This act is also referred to as an overlay. It is especially important in Unix like systems, although it also exists elsewhere. As no new process is created, the process identifier (PID) does not change, but the machine code, data, heap, and stack of the process are replaced by those of the new program. The exec call is available for many programming languages including compilable languages and some scripting languages. In OS command interpreters, the built in command replaces the shell process with the specified program.
Номенклатура
Интерфейсы к exec и его реализации различаются. В зависимости от языка программирования он может быть доступен через одну или несколько функций, а в зависимости от операционной системы – через один или несколько фактических системных вызовов. По этой причине exec иногда описывается как набор функций. Стандартные имена таких функций в C – , , , , и (см. ниже), но не "exec" сам по себе. Ядро Linux имеет один соответствующий системный вызов с именем "execve", в то время как все вышеупомянутые функции являются обертками пользовательского пространства вокруг него. Языки программирования более высокого уровня обычно предоставляют один вызов с именем .
Эффекты
Описатель файла, открытый во время вызова `exec`, остаётся открытым в новом образе процесса, если он не был помечен флагом `FD_CLOEXEC` или открыт с флагом `O_CLOEXEC` (последний был представлен в POSIX.1 2001). Этот механизм используется для определения стандартных потоков (stdin, stdout и stderr) новой программы. Успешное замещение уничтожает предыдущее адресное пространство процесса, и все его области памяти, которые не были разделяемыми, возвращаются операционной системе. Следовательно, все данные, которые не были переданы новой программе или иным образом сохранены, теряются.
Операционные системы DOS
DOS не является многозадачной операционной системой, но замена предыдущего исполняемого образа имеет большое значение из-за жестких ограничений по объему оперативной памяти и отсутствия виртуальной памяти. В DOS для наложения программ используется тот же API, что и в POSIX-системах, и он оказывает схожий эффект. Функции MS DOS exec всегда загружают новую программу в память, как если бы в заголовке исполняемого файла программы значение "максимального объема выделяемой памяти" было установлено в значение по умолчанию 0xFFFF. Утилиту EXEHDR можно использовать для изменения поля максимального объема выделяемой памяти программы. Однако, если это сделать, и программа будет вызвана с помощью одной из функций exec, её поведение может отличаться от поведения программы, запущенной непосредственно из командной строки операционной системы или с помощью одной из функций spawn (см. ниже).
Командные переводчики
Многие Unix-оболочки также предоставляют встроенную команду, которая заменяет процесс оболочки указанной программой. Эта команда также может выполнять перенаправление. В некоторых оболочках даже можно использовать эту команду исключительно для перенаправления, без фактической замены процесса.
Альтернативы
Традиционная система Unix не имеет функциональности для создания нового процесса, запускающего новую исполняемую программу, за один шаг, что объясняет важность exec в программировании для Unix. Другие системы могут использовать spawn как основной инструмент для запуска исполняемых файлов. Его результат эквивалентен последовательности fork–exec в Unix-подобных системах. POSIX поддерживает процедуры posix spawn как необязательное расширение, которое обычно реализуется с использованием vfork.
Другие системы
OS/360 и последующие версии включают системный вызов XCTL (передача управления), выполняющий функцию, аналогичную exec.