Лекции по курсу "Системное программирование для UNIX". Литвинов Д.Г. - 16 стр.

UptoLike

Составители: 

16
Создание процесса
pid_t fork (void)
Функция создает новый процесс. Прототип функции определен в заголовочном
файле <unistd.h>.
Если операция выполнилась успешно, то выполнение и родительского и
дочернего процессов продолжается начиная с команды, следующей за fork. В случае
дочернего процесса fork возвращает значение 0, а в случае родительского процесса
идентификатор порожденного процесса.
Если создание процесса выполнилось неудачно, функция возвращает –1 в
родительском процессе. Переменная errno может принимать следующие значения:
EAGAIN Недостаточно системных ресурсов для создания нового процесса или
пользователь запустил слишком много процессов. Это означает
превышение значения RLIMIT_NPROC, которое обычно может быть
увеличено;
ENOMEM Процессу требуется больше пространства памяти, чем система может
предоставить.
Некоторые атрибуты дочернего процесса отличаются от атрибутов
родительского процесса:
Дочерний процесс имеет собственный идентификатор;
Дочерний процесс получает собственные копии открытых файловых
дескрипторов родительского процесса. Однако изменение атрибутов
дескрипторов дочернего процесса никак не влияет на родительский и
наоборот;
Процессорное время дочернего процесса в момент создания
устанавливается равным нулю;
Дочерний процесс не наследует захваты файлов родительского процесса;
Дочерний процесс не наследует аварийных сигналов, установленных
родительским процессом;
pid_t vfork (void)
Идентична fork, но на некоторых системах выполняется более эффективно.
Однако существуют условия, только при выполнении которых можно использовать
функцию безопасно.
В отличие от fork, vfork не создает копию родительского процесса, а создает
разделяемое с родительским процессом адресное пространство до тех пор, пока не
будет вызвана функция _exit или одна из функций exec. Родительский процесс на это
время останавливает свое выполнение. Отсюда следуют и все ограничения на
использованиедочерний процесс не может изменять никакие глобальные переменные
или даже общие переменные, разделяемые с родительским процессом.
В Linux функция vfork не реализована, вместо нее выполняется fork.
Исполнение файла
Здесь описывается применение семейства функций exec, предназначенных для
исполнения файла как изображения процесса. Эти функции могут использоваться для
того, что использовать в процессе какую-либо программу уже после того, как он был
создан.
Все функции отличаются использованием параметров, однако в
действительности они выполняют одно и то же. Прототипы функций определены в
заголовочном файле <unistd.h>.
int execv (const char *FILENAME, char *const ARGV[])
       Создание процесса
       pid_t fork (void)
       Функция создает новый процесс. Прототип функции определен в заголовочном
файле .
       Если операция выполнилась успешно, то выполнение и родительского и
дочернего процессов продолжается начиная с команды, следующей за fork. В случае
дочернего процесса fork возвращает значение 0, а в случае родительского процесса –
идентификатор порожденного процесса.
       Если создание процесса выполнилось неудачно, функция возвращает –1 в
родительском процессе. Переменная errno может принимать следующие значения:
EAGAIN         Недостаточно системных ресурсов для создания нового процесса или
               пользователь запустил слишком много процессов. Это означает
               превышение значения RLIMIT_NPROC, которое обычно может быть
               увеличено;
ENOMEM         Процессу требуется больше пространства памяти, чем система может
               предоставить.
       Некоторые атрибуты дочернего процесса отличаются от атрибутов
родительского процесса:
       • Дочерний процесс имеет собственный идентификатор;
       • Дочерний процесс получает собственные копии открытых файловых
           дескрипторов родительского процесса. Однако изменение атрибутов
           дескрипторов дочернего процесса никак не влияет на родительский и
           наоборот;
       • Процессорное время дочернего процесса в момент создания
           устанавливается равным нулю;
       • Дочерний процесс не наследует захваты файлов родительского процесса;
       • Дочерний процесс не наследует аварийных сигналов, установленных
           родительским процессом;
       pid_t vfork (void)
        Идентична fork, но на некоторых системах выполняется более эффективно.
Однако существуют условия, только при выполнении которых можно использовать
функцию безопасно.
        В отличие от fork, vfork не создает копию родительского процесса, а создает
разделяемое с родительским процессом адресное пространство до тех пор, пока не
будет вызвана функция _exit или одна из функций exec. Родительский процесс на это
время останавливает свое выполнение. Отсюда следуют и все ограничения на
использование – дочерний процесс не может изменять никакие глобальные переменные
или даже общие переменные, разделяемые с родительским процессом.
        В Linux функция vfork не реализована, вместо нее выполняется fork.

        Исполнение файла
        Здесь описывается применение семейства функций exec, предназначенных для
исполнения файла как изображения процесса. Эти функции могут использоваться для
того, что использовать в процессе какую-либо программу уже после того, как он был
создан.
        Все функции отличаются использованием параметров, однако в
действительности они выполняют одно и то же. Прототипы функций определены в
заголовочном файле .
       int execv (const char *FILENAME, char *const ARGV[])




       16