Управление процессами в ОС Linux

Продолжительность работы:4 часа.

Цель работы: знакомство с многозадачностью ОС Linux; научиться работать со многими процессами, планированию запуска команд в определенное время; мониторинг многозадачной среды; управление многозадачностью.

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

Введение

О процессах LINUX

Процессом в Linux называется выполняющаяся программа. Поскольку Linux – многозадачная система, то в одно и то же время могут выполняться несколько процессов. Чтобы их различать, Linux присваивает каждому процессу уникальный номер, называемый идентификатором процесса (process ID).

Идентификатор процесса – это число, идентифицирующее каждый выполняющийся процесс. Увидеть идентификаторы процессов можно, например, с помощью команды ps.

Получив указание запустить программу (создать процесс), Linux выполняет его, делая точную копию программы, от которой это указание поступило. В простейшем случае, пользователь дает команду своей оболочке запустить программу. Оболочка посылает запрос на клонирование процесса ядру Linux.

Клонирование процессов, процессы init и exec

Клонирование или ветвление (fork) процесса – это операция создания дубликата существующего процесса. Все новые процессы в Linux создаются с помощью механизма клонирования. При этом создается почти точная копия существующего процесса, включая окружение и все открытые процессом файлы. Единственное, что отличает дубликаты, – это флаг, обозначающий ка­кой из процессов родительский, а какой – порождённый (дочерний).

Так как все процессы создаются подобным образом, то у них есть родительский процесс. Каждый выполняющийся в ОС Linux процесс может проследить свое происхождение в обратном порядке вплоть до init– прародителя всех процессов. Сам init, идентификатор процесса которого равен 1, является единственным процессом, запущенным непосредственно ядром Linux. Каждый процесс, создаваемый пользователем во время работы, имеет своим предком процесс оболочки, а родителем процесса оболочки является init.

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

Стандартные ввод и вывод

Каждый вновь созданный процесс получает уже открытыми три «файла». Так как Linux не делает различий между файлами и устройствами, открытый «файл» может быть настоящим файлом на диске или устройством, например, терминалом пользователя. Эти три открытых файла представляют собой стандартное устройство ввода (stdin), стандартное устройство вывода (stdout) и стандартное устройство вывода сообщений об ошибках (stderr). Все команды Linux, как и прикладные программы, получают информацию со стандартного устройства ввода и выводят информацию на стандартное устройство вывода. Все диагностические сообщения автоматически направляются на стандартное устройство вывода сообщений об ошибках.

Это всегда нужно помнить, потому что, например, чтобы отсортировать файл sales.datи вывести результат на экран монитора не сохраняя результата сортировки в самом файле необходимо просто ввести команду:

#sort sales.dat

Её вводом будет не клавиатура (stdin), а файл sales.datт.к. он указан после команды. Выводом же будет файл stdout (в нашем случае экран монитора), т.к. ничего дополнительно не оговаривается.

Пояснение

Командаsort,используемая без параметров, сортирует строки в текстовом файле, первым словом которых является число.

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

Наши рекомендации