Операционная система UNIX. Руководство программиста

       

Процессы


В ОС UNIX всякий раз, когда Вы выполняете команду, запускается процесс, идентифицируемый и отслеживаемый операционной системой. Характерной особенностью ОС UNIX является то, что одни процессы могут порождаться другими. Это происходит чаще, чем может показаться. Например, когда Вы входите в систему, запускается процесс, скорее всего это shell. Если затем войти в редактор РК, запустить из него shell и выполнить команду ps -f, на экране появится примерно следующее:

UID PID PPID C STIME TTY TIME COMMAND userow 94 1 0 10:15:56 tty6 0:02 -sh userow 116 94 0 10:16:25 tty6 0:00 -sh userow 125 116 0 10:16:27 tty6 9:38 /dss/rk/rk.20.02 -hrk=/dss/rk/d.hrk -nocore -in=stdin -out=stdout -display=D211 userow 285 125 1 13:11:10 tty6 0:00 sh userow 290 285 10 13:11:58 tty6 0:00 ps -f

Таким образом, у пользователя userow, проделавшего описанные выше действия, имеется 5 активных процессов. Интересно проследить переключения в колонках идентификатор процесса (PID) и идентификатор родительского процесса (PPID). Shell, запущенный при входе пользователя userow в систему, имеет идентификатор процесса 94; его предком является процесс инициализации (его идентификатор равен 1). Процесс с идентификатором 116 порожден для выполнения shell-процедуры rk; он является предком процесса с идентификатором 125 и т.д.

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

Можно рассуждать следующим образом: "Хорошо, когда я работаю с компьютером в интерактивном режиме, удобно иметь возможность запускать поочередно различные программы. Но зачем нужно, чтобы из одной программы можно было запускать другую, почему бы не создать один большой выполняемый файл, объединяющий все необходимые программы?"

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

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

Таким образом, имеется достаточно аргументов в пользу необходимости создания новых процессов. Для создания процессов есть три основных средства:

  • system(3S) - запрос к shell'у на выполнение команды.
  • exec(2) - завершить один процесс и приступить к выполнению другого.
  • fork(2) - создать копию данного процесса.



Содержание раздела