2.17 Процессы.
atexit (BSD) <stdlib.h, cstdlib>
int atexit(void (*function)(void));
Регистрирует функцию, вызываемую при обычном завершении программы/процесса. Регистрация происходит цепочкой что позволяет регистрировать несколько функций.
clone (LINUX) <sched.h>
int clone(int (*fn) (void *arg), void *child_stack, int flags, void *arg);
Клонирует новую задачу на базе функции <fn> со стеком <child_stack> флагами <flags> и аргументами <arg>.
exec[c,l,e,p,v] (POSIX) <unistd.h>
int execl( const char *path, const char *arg, ...);
int execlp( const char *file, const char *arg, ...);
int execle( const char *path, const char *arg , ..., char * const envp[]);
int execv( const char *path, char *const argv[]);
int execvp( const char *file, char *const argv[]);
int execve(const char *filename, char *const argv[], char *const envp[]);
Заменяет выполняющуюся программу другой программой. Отличия функций:
- p - Производить поиск программы в каталогах описанных в PATH;
- v - Принимать список аргументов программы в виде массива строковых указателей оканчивающихся NULL-указателем;
- l - Принимает список аргументов переменного размера;
- e - Принимать в дополнительном аргументе массив переменных сред.
exit, _exit, _exit (POSIX) <stdlib.h, unistd.h>
void exit(int status);
void _exit(int status);
exit - обычное завершение работы программы/процесса. _exit - немедленное завершение работы программы/процесса.
fork (POSIX) <sys/types.h; unistd.h>
int fork();
Порождает дочерний процесс. Родительскому процессу возвращается ID дочернего процесса ,а дочернему 0.
getpid, getppid (POSIX) <sys/types.h, unistd.h>
pid_t getpid(void);
pid_t getppid(void);
getpid - возвращает идентификатор текущего процесса (PID). getppid - возвращает идентификатор родительского процесса(PPID).
nice (BSD) <unistd.h>
int nice(int inc);
Устанавливает фактор уступчивости вызывающего процесса в величину <inc> (-39..39). Чем фактор больше, тем ниже приоритет процесса.
sched_setaffinity, sched_getaffinity (Linux) <sched.h>
int sched_setaffinity(pid_t pid, unsigned int len, unsigned long *mask);
int sched_getaffinity(pid_t pid, unsigned int len, unsigned long *mask);
Установить/получить привязку процесса к конкретному процессору многопроцессорной системы.
sched_setparam, sched_getparam (POSIX) <sched.h>
int sched_setparam(pid_t pid, const struct sched_param *p);
int sched_getparam(pid_t pid, struct sched_param *p);
Установка/получение параметров диспетчеризации процесса.
sched_setscheduler, sched_getscheduler (POSIX) <sched.h>
int sched_setscheduler(pid_t pid, int policy, const struct sched_param *p);
int sched_getscheduler(pid_t pid);
Установка/получение политики диспетчеризации процесса.
sched_get_priority_max, sched_get_priority_min (POSIX) <sched.h>
int sched_get_priority_max(int policy);
int sched_get_priority_min(int policy);
Получение максимального/минимального значения приоритета реального времени.
sched_rr_get_interval (POSIX) <sched.h>
int sched_rr_get_interval(pid_t pid, struct timespec *tp);
Получить продолжительность кванта времени для SCHED_RR планирования.
sched_yield (POSIX) <sched.h>
int sched_yield(void);
Отдать процессорное время другим процессам.
setsid (POSIX) <unistd.h>
pid_t setsid(void);
Вызывающий процесс становится ведущим в группе, ведущим процессом нового сеанса и не имеет контролирующего терминала.
setpgid, getpgid, setpgrp, getpgrp (POSIX, BSD) <unistd.h>
int setpgid(pid_t pid, pid_t pgid);
pid_t getpgid(pid_t pid);
int setpgrp(void);
pid_t getpgrp(void);
Устанавливает/получает идентификатор группы процессов
system (ANSI,POSIX) <stdlib.h>
int system (const char * string);
Выполняет, указанные в string, системные команды.
wait, waitpid, wait3, wait4 (POSIX) <sys/types.h, sys/wait.h, sys/resource.h>
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
pid_t wait3(int *status, int options, struct rusage *rusage);
pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage);
Приостанавливают выполнение процесса до тех пор, пока дочерний процесс не завершится, или до появления сигнала, который либо завершает текущий процесс, либо требует вызвать функцию-обработчик. Если дочерний процесс к моменту вызова функции уже завершился (так называемый "зомби" ("zombie")), то функция немедленно возвращается. Параметр pid:
- < -1 -- нужно ждать любого дочернего процесса, идентификатор группы процессов которого равен абсолютному значению <pid>;
- -1 -- ожидание любого дочернего процесса;
- 0 -- означает ожидание любого дочернего процесса, идентификатор группы процессов которого равен идентификатору текущего процесса;
- > 0 -- ожидание дочернего процесса, чей идентификатор равен pid;
В <rusage> записывается структура struct rusage, заданная в <sys/resource.h>, заполненная соответствующей информацией.