#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() в языке С