Процессы и запуск системы

Процессы

Процесс - объект ОС, хранящий данные о выполняемой программе и позволяющий управлять её выполнением.
Демон - процесс, работающий в фоне.

Атрибуты процесса

  1. PID - уникальный идентификатор процесса (0..65535)
  2. PPID - уникальный идентификатор родителя.
    PID 0 - ядро (впрочем, это не процесс)
    PID 1 - процесс, запущенный самым первым. Обычно это init.
  3. UID, GID - идентификаторы пользователя, запустившего процесс.
  4. EUID, EGID - права, с которыми процесс выполняется.
  5. Приоритет (-19..20). Чем ниже, тем приоритетней.

nice - команда, задающая приоритет для запускаемой программы.
nice -n +5 find / -name ‘*.txt’

top - список процессов (интерактивная команда)

renice +5

ps ax - команда для просмотра процессов.
ps ax | grep bash - можно грепать

kill - для убийства процессов kill %1 - для убийства фоновых jobs kill -9 - посылает сигнал KILL, который убивает гарантированно.

killall mc - убивает процессы по имени

Запуск команд по расписанию

crontab
/etc/crontab

Процесс загрузки

  1. BIOS (UEFI) копируется в ОЗУ.
  2. Запуск BIOS (UEFI).
  3. Power On Self Test (POST) - тест железа (памяти).
  4. Лезет в настройки в nvram (в просторечии CMOS).
  5. Узнает загрузочный диск.
  6. Копирует первый сектор диска (mbr - Master Boot Record) в ОЗУ.
  7. Запускает MBR (там GRUB - GRand Unified Bootloader).
  8. GRUB считывает с диска ядро и initrd (Initial Ram Disk - микроскопическая ФС с минимумом утилит и модулей).
  9. Запускается ядро, которое самораспаковывается.
  10. Ядро монтирует root FS и запускает /sbin/init (systemd).
  11. init стартует все сервисы и, в конце, графическую оболочку.

dmesg - посмотреть лог загрузки ядра.

Уровни запуска

Уровень запуска - состояние, в котором находится ОС. Характеризуется набором запущенных программ.
/etc/rc[0-6].d

0 - выключение компьютера
1 - однопользовательская система
2 - многопользовательская система (обычный уровень)
6 - перезагрузка

скрипты init, начинающиеся с K убивают программы. S - запускают. Числа после этих букв нужны для сортировки, т.к. запуск их идет в алфавитном порядке.

Все скрипты в rc?.d являются симлинками на /etc/init.d
Скрипты из init.d принимают аргументы start и stop.

/etc/init.d/samba start - способ запускать (или останавливать - stop) системные сервисы.

Переход между уровнями запуска - telinit.

Практика.

  1. Написать скрипт, следящий за появлением программ с повышенным приоритетом и выводящий в консоль их названия.
    man ps - как отлавливать приоритеты.
    diff - сравнение текстовых файлов.

  2. Добавить свой скрипт, выводящий Hello, world в /tmp/abc в уровень запуска 3 и сделать его уровенем запуска по-умолчанию.

Written on October 17, 2016