Подробнее о флагах

Лекция №2

int clone (int (*fn) (void*),

void *stack,

int flags,

void *args)

Создает новый процесс в самом широком понимании.

1) указатель на функцию, которая будет запущена как новый поток

2) указатель на стек для нового процесса (конец стека)

3) флаги

4) аргумент функции

CLONE_PARENT

CLONE_FS – клонировать файловую систему (клонируется корневой или текущий каталог), если флага нет, то С получит копию, если есть, то В и С имеют общие корневой и текущий каталоги.

CLONE_FILES – общими становятся таблицы файлов.

CLONE_SIGHAND – общая обработка сигналов

CLONE_VFORK – если установлен, то запускается процесс, а родительский процесс приостанавливается до остановки дочернего (выход по exit или вызов любой функции exec *)

CLONE_VM – общей становится виртуальная память, в этом случае можно не указывать PARENT, FS, FILES (фактически создается поток).

pid_t wautpid (pid_t pid,

int *status,

int flags)

Ожидает завершение процесса(ов)

1) Если pid > 0, то мы ждем завершение процесса с указанным pid номером.

Если pid = 0, ждем завершения любого дочернего процесса, который принадлежит к той же группе процессов, что и вызывающий.

Если pid = -1, ждем завершение любого дочернего процесса.

Если pid < -1, ждем завершение любого дочернего процесса из группы, номер которой равно модулю числа pid.

2) Указатель на нашу переменную, в которую будет записан код завершения процесса.

3) либо 0

либо WNOHANG – не вешаться, если установлен, то функция проверяет на завершенность процессы, не ожидая их завершения.

Результат > 0 – номер процесса, который завершился;

Результат = 0 – нет завершившихся процессов (дочерние есть, но они не завершены);

Результат = -1 – ошибка.

pid_t wait (int *st) – ждет завершения дочернего процесса.

pid_t getpid() – получить номер процесса.

pid_t getppid() – получить номер родителя.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: