Домашнее задание №2
Задания выполняются на kodomo. После выполнения всех заданий нужно записаться в очередь на проверку (ссылка сверху на странице курса). Дедлайн – 01:00 AM (час ночи) 13 ноября.
В каждом задании требуется правильным образом запустить и управлять выполнением программы. В случае успеха программа выдаст ОК и уникальный идентификатор запуска. Все три идентификатора нужно указать при записи в очередь на проверку в качестве комментария. Какой идентификатор соответствует какой программе можно не указывать.
1. Ограничение ресурсов
Задача – научиться ограничивать ресурсы для процессов с помощью контрольных групп ядра Linux (cgroup).
Вам необходимо запустить программу HW2_limits с ограничением количества потоков исполнения, максимум 50 штук, и общим количеством используемой оперативной памяти, не более 10M. Порог на оперативную память должен быть жестким, он не должен превышаться ни при каких условиях.
Задание предлагается выполнять с помощью утилиты systemd-run.
2. Управление задачами
Задача – научиться управлять активными и фоновыми задачами.
Вам нужно определенным образом запустить программу HW2_control. При запуске необходимо установить значение nice процесса равное 8. Запущенный процесс должен игнорировать "обрыв связи" с помощью nohup(1).
С запущенным процессом необходимо последовательно совершить действия, перечисленные ниже. Порядок действий важен!
- Установить nice процесса на 11.
- Приостановить процесс и возобновить его в фоновом режиме.
- Подождать не менее 3 секунд и вернуть процесс в активный режим.
- Приостановить процесс и подождать не менее 3 секунд.
- Возобновить его в активном режиме.
Завершить процесс сочетанием Ctrl+C.
Если возникают проблемы с переносом процесса в активный/фоновый режим, изучите встроенные команды bash для управления задачами: jobs, bg, fg, disown. Еще есть полезная встроенная команда help.
3. Сигналы
Задача – научиться посылать сигналы процессам.
Программа HW2_signals при получении сигнала вместо его стандартной обработки печатает название сигнала в STDOUT. Исключение составляют два сигнала, для которых невозможно изменить обработчик (см. signal(7)), два сигнала, используемых библиотекой glibc для внутреннего управления потоками, и сигналы SIGTTOU и SIGCHLD из-за особенностей реализации программы.
Вам надо запустить программу и выполнить следующие действия (у программы pgrep есть полезная опция -f, читайте man).
Определите, какой сигнал получает процесс, подключенный к терминалу, когда пользователь вводит Ctrl+C.
Аналогично для Ctrl+Z.
Определите, посылается ли какой-либо сигнал при вводе Ctrl+D.
Убедитесь, что kill по умолчанию посылает SIGTERM.
Пошлите процессу сигнал SIGUSR1.
- Пошлите процессу сигнал с номером 1.
- Пошлите процессу сигнал с максимальным возможным номером.
- Приостановите процесс, подождите не менее пяти секунд и возобновите его.
Если процесс напечатал OK, то вы все сделали правильно. Теперь надо его убить, что сделать не так просто, учитывая измененную обработку большинства сигналов. Убедитесь, что его действительно больше нет в системе (например, с помощью ps).
