FreeSource: Статьи/КраткоОбоВсём/Clang/part2/part17

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[]);

Заменяет выполняющуюся программу другой программой. Отличия функций:

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_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:

В <rusage> записывается структура struct rusage, заданная в <sys/resource.h>, заполненная соответствующей информацией.