Краткие теоретические сведения-

Системный вызов fork

Основным примитивом для создания процессов является системный вызов fork. Он является механизмом, который превращает Linux в многозадачную систему.

Описание

int pid = fork();

В результате успешного вызова fork ядро создает новый процесс, который является почти точной копией вызывающего процесса. Другими словами, новый процесс выполняет копию той же программы, что и создавший его процесс, при этом все его объекты данных имеют те же самые значения, что и в вызывающем процессе, за исключением значения, которое возвращает fork.

Созданный процесс называется дочерним процессом (child process), а процесс, осуществивший вызов fork, называется родителем (parent).

После вызова родительский процесс и его вновь созданный потомок выполняются одновременно, при этом оба процесса продолжают выполнение с оператора, который следует сразу же за вызовом fork.

Родитель и потомок отличаются значением переменной pid. Процесс-потомок в качестве возвращаемого значения системного вызова fork получает число 0, а процесс-предок – целое положительное число (идентификатор процесса-потомка, т.е. его уникальный номер). Так как возвращаемые в родительском и дочернем процессе значения различаются, то программист может задавать различные действия для двух процессов.

Значение, возвращаемое родительскому процессу в переменной pid, называется идентификатором процесса (process-id) дочернего процесса. Это число идентифицирует процесс в системе аналогично идентификатору пользователя. Поскольку все процессы порождаются при помощи вызова fork, то каждый процесс Linux имеет уникальный идентификатор процесса.

Программа может получить свой идентификатор процесса при помощи следующего системного вызова:

pid:= getpid();

Аналогично вызов getppid возвращает идентификатор родителя вызывающего процесса:

ppid:= getppid();


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



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