Процессы и запуск системы
Процессы
Процесс - объект ОС, хранящий данные о выполняемой программе
и позволяющий управлять её выполнением.
Демон - процесс, работающий в фоне.
Атрибуты процесса
- PID - уникальный идентификатор процесса (0..65535)
- PPID - уникальный идентификатор родителя.
PID 0 - ядро (впрочем, это не процесс)
PID 1 - процесс, запущенный самым первым. Обычно это init. - UID, GID - идентификаторы пользователя, запустившего процесс.
- EUID, EGID - права, с которыми процесс выполняется.
- Приоритет (-19..20). Чем ниже, тем приоритетней.
nice - команда, задающая приоритет для запускаемой программы.
nice -n +5 find / -name ‘*.txt’
top - список процессов (интерактивная команда)
renice +5
ps ax - команда для просмотра процессов.
ps ax | grep bash - можно грепать
kill
killall mc - убивает процессы по имени
Запуск команд по расписанию
crontab
/etc/crontab
Процесс загрузки
- BIOS (UEFI) копируется в ОЗУ.
- Запуск BIOS (UEFI).
- Power On Self Test (POST) - тест железа (памяти).
- Лезет в настройки в nvram (в просторечии CMOS).
- Узнает загрузочный диск.
- Копирует первый сектор диска (mbr - Master Boot Record) в ОЗУ.
- Запускает MBR (там GRUB - GRand Unified Bootloader).
- GRUB считывает с диска ядро и initrd (Initial Ram Disk - микроскопическая ФС с минимумом утилит и модулей).
- Запускается ядро, которое самораспаковывается.
- Ядро монтирует root FS и запускает /sbin/init (systemd).
- 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.
Практика.
-
Написать скрипт, следящий за появлением программ с повышенным приоритетом и выводящий в консоль их названия.
man ps - как отлавливать приоритеты.
diff - сравнение текстовых файлов. -
Добавить свой скрипт, выводящий Hello, world в /tmp/abc в уровень запуска 3 и сделать его уровенем запуска по-умолчанию.
