Электронный учебник:


Курс лекций:


Дополнительно:

Практикум:



Наши хостеры:

Москва заправка, принтеры ремонт картриджей.

--------------------------

Управление процессами в UNIX

Понятие процесса в UNIX существенно отличается от аналогичного понятия в других популярных ОС. Если в MS-DOS, Windows и других системах новый процесс создается только при запуске программы, то в UNIX создание процесса и запуск программы – это два совершенно разных действия. При этом процесс в некотором роде «более первичен», чем программа. Если по стандартному определению (см. п. 4.2.1) процесс есть работа по выполнению программы, то в UNIX будет более уместно сказать, что программа – это один из ресурсов, используемых процессом.

Существует единственный способ создания процесса в UNIX, и этот способ заключается в вызове функции без параметров fork(). Эта функция создает новый процесс, который является точной копией процесса-родителя: выполняет ту же программу, наследует такие же хэндлы открытых файлов и т.д. При этом содержимое областей памяти процесса копируется. Единственным различием является идентификатор процесса (pid) – целое число, уникальное для каждого процесса в системе. После завершения создания оба процесса, и родитель, и потомок, будут выполнять одну и ту же команду, следующую в программе после вызова fork. Однако при этом функция fork возвращает процессу-родителю значение pid порожденного потомка, а потомку возвращает значение 0. Проверка возвращенного значения – простейший способ для процесса определить, «кто он такой» – родитель или потомок.

Типовой фрагмент программы на C может выглядеть примерно так:

 

  pid = fork();  // Создание нового процесса
  if (pid == -1)   // Процесс не создан

     { обработка ошибки создания процесса}

  else if (pid == 0) // Это порожденный процесс

     { операторы, выполняемые процессом-потомком }

  else               // Это процесс-родитель

     { операторы, выполняемые процессом-родителем }

предыдущаяследующая