OpenSCADAWiki: Roman Savochenko/C Short All/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_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:
В <rusage> записывается структура struct rusage, заданная в <sys/resource.h>, заполненная соответствующей информацией.