Камерон Хьюз - Параллельное и распределенное программирование на С++
- Название:Параллельное и распределенное программирование на С++
- Автор:
- Жанр:
- Издательство:Издательский дом «Вильямс»
- Год:2004
- Город:МоскваСанкт-ПетербургКиев
- ISBN:ISBN 5-8459-0686-5 (рус.)ISBN 0-13-101376-9 (англ.)
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Камерон Хьюз - Параллельное и распределенное программирование на С++ краткое содержание
Эта книга адресована программистам, проектировщикам и разработчикам программных продуктов, а также научным работникам, преподавателям и студентам, которых интересует введение в параллельное и распределенное программирование с использованием языка С++.
Параллельное и распределенное программирование на С++ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Идентификатор (ID) процесса | getpid() |
ID родительского процесса | getppid() |
ID группы процессов | getpgid() |
Сеансовое членство | getsid() |
Идентификатор эффективного пользователя | getuid() |
Идентификатор эффективной группы | getgid() |
Дополнительные ID групп | getgroups() |
Время, оставшееся до сигнала тревоги | alarm() |
Фактор уступчивости | nice() |
Время, используемое до настоящего момента | times () |
Маска сигналов процесса | sigprocmask() |
Ожидающие сигналы | sigpending() |
Предельный размер файла | ulimit() |
Предельный объем ресурсов | getrlimit() |
Маска создания файлового режима | umask() |
Текущий рабочий каталог | getcwd() |
Корневой каталог |
Утилита pstree
Утилита pstree в среде Linux отображает дерево процессов (точнее, она отображает выполняющиеся процессы в форме древовидной структуры). Корнем этого дерева является процесс init.
pstree [-a] [-c] [-h | -Hpid] [-l] [-n] [-p] [-u] [-G] | -U] [pid | user]
pstree -V
При вызове этой утилиты можно использовать следующие опции,
-а Отобразить аргументы командной строки,
-h Выделить текущий процесс и его предков.
-HАналогично опции -h,но выделению подлежит заданный процесс.
-n Отсортировать процессы с одинаковым предком по значению PID, а не
по имени,
-p Отобразить значения PID.
На рис. 3.10 показан результат выполнения команды pstree -h в среде Linux.
ka:~ # pstree -h
init-+-applix
|-atd
|-axmain
|-axnet
|-cron
|-gpm
|-inetd
|-9*[kdeinit]
|-kdeinit -+-kdeinit
| |-kdeinit---bash---gimp---script-fu
| '-kdeinit---bash -+-man---sh---sh---less
| '-pstree
|-kdeinit---cat
|-kdm-+-X
| '-kdm---kde---ksmserver
|-kflushd
|-khubd
|-klogd
|-knotify
|-kswapd
|-kupdate
|-login---bash
|-lpd
|-mdrecoveryd
|-5*[mingetty]
|-nscd---nscd---5*[nscd]
|-sshd
|-syslogd
|-usbmgr
'-xconsole
Ри с .3.10. Результат выполнения команды pstree -hв среде Linux
Использование системной функции fork()
Системная функция (или системный вызов) fork () создает новый процесс, который представляет собой дубликат вызывающего процесса, т.е. его родителя. При успешном выполнении функция fork () возвращает родительскому и сыновнему процессам два различных значения. Сыновнему возвращается число 0, а родительскому - значение PID сыновнего процесса. Родительский и сыновний процессы продолжают выполняться с инструкции, непосредственно следующей за функцией fork (). В случае неудачного выполнения (оно выражается в том, что сыновний процесс не был создан) родительскому процессу возвращается число -1.
Синопсис
#include
pid_t fork(void); _
Неудачный исход функции fork () возможен в случае, если система не обладает ресурсами для создания еще одного процесса. Это происходит при превышении ограничения (если оно существует) на количество сыновних процессов, которое может порождать родитель, или на количество выполняющихся процессов в масштабе всей системы. В этом случае устанавливается переменная errno, которая означает наличие ошибки.
Использование семейства системных функций exec
Семейство функций exec предназначено для замены образа вызывающего процесса образом нового процесса. При вызове функции fork () создается новый процесс, который является точной копией родительского процесса, а функция exec () заменяет образ «скопированного» процесса образом копии. Образ нового процесса представляет собой обычный выполняемый файл, который немедленно запускается на выполнение. Этот файл можно задать с помощью имени и пути доступа к нему. Функции семейства exec могут передать новому процессу аргументы командной строки, а также установить переменные среды. Если функция выполнилась успешно, она не возвращает никакого значения, поскольку образ процесса, который содержал обращение к функции exec, уже перезаписан. В случае неудачи вызывающему процессу возвращается число -1. Все функции exec () могут иметь неудачный исход при следующих условиях:
• разрешения не признаны; разрешение на поиск отвергается для каталога выполняемых файлов; разрешение на выполнение отвергается для выполняемого файла;
• файлы не существуют, выполняемый файл не существует; каталог не существует;
• файл невозможно выполнить; файл невозможно выполнить, поскольку он открыт для записи другим процессом; файл не является выполняемым;
пр облемы с символическими ссылками; при анализе пути к исполняемому файлу символические ссылки образуют циклы; символические ссылки делают путь к исполняемому файлу слишком длинным.
Функции семейства exec используются совместно с функцией fork (). Функция fork () создает и инициализирует сыновний процесс «по образу и подобию» родительского. Образ сыновнего процесса затем заменяет образ своего предка посредством вызова функции exec (). Пример использования функций fork() и exec() показан в листинге 3.2.
//Лис тинг 3.2. Использование системных функций fork() и exec()
RtValue = fork();
if(RtValue == 0){
execl("/path/direct»,«direct»,".»);
}
В листинге 3.2 демонстрируется вызов функции fork(). Значение, которое она возвращает, сохраняется в переменной RtValue. Если значение RtValue равно 0, значит, это — сыновний процесс, и в нем вызывается функция execl() с параметрами. Первый параметр содержит путь к выполняемому модулю, второй — инструкцию для выполнения, а третий — аргумент. Второй параметр, direct, представляет собой имя утилиты, которая перечисляет все каталоги и подкаталоги из данного каталога. Всего существует шесть версий функций exec, предназначенных для использования различных соглашений о вызовах.
Функции execl ()
Функции execl (), execle () и execlp () передают аргументы командной строки в виде списка. Количество аргументов командной строки должно быть известно во время компиляции.
• int execl(const char *path,const char *arg0,.../*,(char *)0 */);
Здесь path — путевое имя выполняемой программы. Его можно задать в виде полного составного имени либо относительного составного имени из текущего каталога. Последующие параметры представляют собой список аргументов командной строки, от arg0 до argn. Всего может быть n аргументов. Этот список завершается NULL-указателем.
Читать дальшеИнтервал:
Закладка: