Продолжительность работы: 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, используемая без параметров, сортирует строки в текстовом файле, первым словом которых является число.
Когда пользователь регистрируется в системе, файлы стандартных устройств ввода, вывода и вывода сообщений об ошибках подключаются к его терминалу. Все запускаемые затем этим пользователем программы (создаваемые им процессы) получают доступ к его терминалу через эти три открытых файла. Виды терминалов, к которым будут подключены эти файлы, могут быть изменены в соответствии с потребностями конкретного пользователя.