ВУЗ:
Составители:
15
Запуск команды
Наиболее простым способом запустить программу является использование
функции system. Эта функция выполняет большую часть работы по запуску программы,
однако не дает практически никаких возможностей по управлению деталями –
программа вынуждена ждать завершения подпрограммы перед тем, как программа
сможет сделать что-либо еще.
int system (const char *COMMAND)
Эта функция выполняет команду COMMAND как команду командного
процессора. В Linux всегда используется командный процессор sh. Он пытается найти
команду в каталогах, указанных в переменной среды PATH и выполняет найденную
команду. Функция возвращает –1 в случае, если создать процесс невозможно и код
состояния процесса в случае успешного выполнения. Если аргумент COMMAND
является нулевым указателем, то ненулевое возвращаемое значение показывает, что
командный процессор существует и функция может использоваться.
Прототип функции определен в заголовочном файле <stdlib.h>.
Концепции создания процесса
Каждому процессу при создании присваивается свой идентификатор процесса
(ID), который является уникальным среди всех идентификаторов процессов. Время
жизни процесса заканчивается в момент, когда сообщение о прекращении работы
дочернего процесса передается родительскому процессу. В этот момент все ресурсы,
ассоциированные с процессом освобождаются.
Обычно процессы создаются с помощью функции fork. Дочерний процесс,
созданный с помощью fork является копией родительского процесса за тем
исключением, что имеет собственный идентификатор.
После создания дочернего процесса оба процесса продолжают выполняться в
нормальном режиме. Если существует необходимость дождаться окончания
выполнения дочернего процесса, а лишь за этим продолжить выполнять поток
родительского процесса, то для этого можно использовать функции wait и waitpid.
Вновь созданный дочерний процесс выполняет ту же самую программу, что и
родительский процесс, начиная с той точки, где вернула управление функция fork.
Значение, возвращаемое fork может использоваться для того, чтобы определить,
выполняется программа в родительском или дочернем процессе.
Выполнение одной и той же программы несколькими процессами редко
является полезным. Однако, дочерний процесс может выполнять другую программу,
если он создан функцией exec. Программа, которая исполняется процессом, называется
«изображением процесса».
Идентификация процесса
С помощью типа данных pid_t можно задать идентификаторы процессов.
Можно получить идентификатор процесса, выполнив функция getpid. Функция getppid
возвращает идентификатор родительского процесса. Следующие тип данных и функции
определены в заголовочных файлах <unistd.h> и <sys/types.h>.
pid_t
Этот знаковый целочисленный тип данных предназначен для представления
идентификаторов процессов. В Linux он равен типу данных int.
pid_t getpid (void)
Функция возвращает значение идентификатора текущего процесса.
pid_t getppid (void)
Функция возвращает значение идентификатора родительского процесса.
Запуск команды
Наиболее простым способом запустить программу является использование
функции system. Эта функция выполняет большую часть работы по запуску программы,
однако не дает практически никаких возможностей по управлению деталями –
программа вынуждена ждать завершения подпрограммы перед тем, как программа
сможет сделать что-либо еще.
int system (const char *COMMAND)
Эта функция выполняет команду COMMAND как команду командного
процессора. В Linux всегда используется командный процессор sh. Он пытается найти
команду в каталогах, указанных в переменной среды PATH и выполняет найденную
команду. Функция возвращает –1 в случае, если создать процесс невозможно и код
состояния процесса в случае успешного выполнения. Если аргумент COMMAND
является нулевым указателем, то ненулевое возвращаемое значение показывает, что
командный процессор существует и функция может использоваться.
Прототип функции определен в заголовочном файле .
Концепции создания процесса
Каждому процессу при создании присваивается свой идентификатор процесса
(ID), который является уникальным среди всех идентификаторов процессов. Время
жизни процесса заканчивается в момент, когда сообщение о прекращении работы
дочернего процесса передается родительскому процессу. В этот момент все ресурсы,
ассоциированные с процессом освобождаются.
Обычно процессы создаются с помощью функции fork. Дочерний процесс,
созданный с помощью fork является копией родительского процесса за тем
исключением, что имеет собственный идентификатор.
После создания дочернего процесса оба процесса продолжают выполняться в
нормальном режиме. Если существует необходимость дождаться окончания
выполнения дочернего процесса, а лишь за этим продолжить выполнять поток
родительского процесса, то для этого можно использовать функции wait и waitpid.
Вновь созданный дочерний процесс выполняет ту же самую программу, что и
родительский процесс, начиная с той точки, где вернула управление функция fork.
Значение, возвращаемое fork может использоваться для того, чтобы определить,
выполняется программа в родительском или дочернем процессе.
Выполнение одной и той же программы несколькими процессами редко
является полезным. Однако, дочерний процесс может выполнять другую программу,
если он создан функцией exec. Программа, которая исполняется процессом, называется
«изображением процесса».
Идентификация процесса
С помощью типа данных pid_t можно задать идентификаторы процессов.
Можно получить идентификатор процесса, выполнив функция getpid. Функция getppid
возвращает идентификатор родительского процесса. Следующие тип данных и функции
определены в заголовочных файлах и .
pid_t
Этот знаковый целочисленный тип данных предназначен для представления
идентификаторов процессов. В Linux он равен типу данных int.
pid_t getpid (void)
Функция возвращает значение идентификатора текущего процесса.
pid_t getppid (void)
Функция возвращает значение идентификатора родительского процесса.
15
Страницы
- « первая
- ‹ предыдущая
- …
- 13
- 14
- 15
- 16
- 17
- …
- следующая ›
- последняя »
