Операционная система Linux



              

Запуск дочерних процессов - часть 3


активный процесс, foreground process - процесс, имеющий возможность вводить данные с терминала. В каждый момент у каждого терминала может быть не более одного активного процесса.

Фоновый процесс, background process - процесс, не имеющий возможности вводить данные с терминала. Пользователь может запустить любое, но не превосходящее заранее заданного в системе, число фоновых процессов.

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

В выдаче ps, которую получил Мефодий, можно заметить, что PID стартовой оболочки равен 3590, а PID запущенных из-под него команд (одной фоновой и одной активной) – 3634 и 3635. Это значит, что за время, прошедшее с момента входа Мефодия в систему до момента запуска sh loop&, в системе было запущено еще 3634-3590=44 процесса. Что ж, в Linux могут одновременно работать несколько пользователей, да и самой системе иногда случается запустить какую-нибудь утилиту (например, выполняя действия по расписанию). А вот sh и ps получили соседние PID, значит, пока Мефодий нажимал Enter и набирал ps -f, никаких других процессов не запускалось.

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

[methody@localhost methody]$ bash loop& [2] 3639 [methody@localhost methody]$ top 14:06:50 up 3:41, 5 users, load average: 1,31, 0,76, 0,42 4 processes: 1 sleeping, 3 running, 0 zombie, 0 stopped CPU states: 99,4% user, 0,5% system, 0,0% nice, 0,0% iowait, 0,0% idle Mem: 514604k av, 310620k used, 203984k free, 0k shrd, 47996k buff 117560k active, 148388k inactive Swap: 1048280k av, 0k used, 1048280k free 184340k cached PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND 3639 methody 20 0 1260 1260 1044 R 50,3 0,2 0:12 bash 3634 methody 18 0 980 980 844 R 49,1 0,1 3:06 sh 3641 methody 9 0 1060 1060 872 R 0,1 0,2 0:00 top 3590 methody 9 0 1652 1652 1264 S 0,0 0,3 0:00 bash




Содержание  Назад  Вперед