double arrow

Прототип системного вызова


#include <sys/types.h>

#include <unistd.h>

pid_t fork(void);

При успешном создании нового процесса в процесс-родитель возвращается положительное значение, равное идентификатору процесса-ребенка. В процесс-ребенок же возвращается значение 0. Если по какой-либо причине создать новый процесс не удалось, то системный вызов вернет в инициировавший его процесс значение -1. Таким образом, общая схема организации различной работы процесса-ребенка и процесса-родителя выглядит так:

pid = fork();

if (pid == -1){

...

/* ошибка */

} else if (pid == 0){

...

/* ребенок */

...

} else {

...

/* родитель */

...

}

Задание 2.

Напишите программу создания нового процесса с одинаковой работой процессов ребенка и родителя (например, процессы печатают pid и ppid). Проанализируйте полученный результат. Измените программу так, чтобы родитель и ребенок совершали разные действия (например, предок печатает буквы, а потомок - цифры, начальные и конечные элементы для печати в процессах вводите с клавиатуры).

Завершение процесса. Функция exit()

Прототип функции

#include <stdlib.h>

void exit(int status);

Описание функции

Функция exit служит для нормального завершения процесса. При выполнении этой функции происходит сброс всех частично заполненных буферов ввода-вывода с закрытием соответствующих потоков (файлов, pipe, FIFO, сокетов), после чего инициируется системный вызов прекращения работы процесса и перевода его в состояние «закончил исполнение».




Возврата из функции в текущий процесс не происходит, и функция ничего не возвращает.

Значение параметра status - кода завершения процесса - передается ядру операционной системы и может быть затем получено процессом, породившим завершившийся процесс. Для кода завершения допустимы значения от 0 до 255. По соглашению, код завершения 0 означает безошибочное завершение процесса.

Параметры функции main() в языке С







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