-
Notifications
You must be signed in to change notification settings - Fork 228
ДЗ Процессы
Изучить API для вайлового ввода вывода и threads. Примеры кода в 03-process-threads-files/code
, прочитайте man на все функции, кроме main
и те, которые написанны внутри примеров. В идеале вы должны точно понимать, что каждый из примеров делает. Подробнее все эти API мы будем разбирать на лекциях в дальнейшем, но лучше сейчас получить представление о чем пойдет речь
По процессам нужно написать демонизацию приложение и запись pid процесса в файл, основной файл в src/main.cpp.
Добавить в afina
две опции командной строки:
- -d: если указан этот флаг, тогда приложение запускается в режиме демона
- -p : если указан такой параметр, то в заданный файл пишется pid процесса приложения
Демонизация: Для того, что правильно демонизировать процесс нужно:
- сделать fork
- убить родителя
- в потомке прикрепиться к новой сессии
setsid
- закрыть стандартные потоки ввода-вывода
Кроме этого, демон должен корректно обрабатывать сигналы завершения работы, но мы это сделаем потом, сейчас процесс должен корректно завершатся по сигналу KILL
и TERM
.
Тестов нет, проверять руками. Ожидаемое поведение:
[user@domain build] ./src/afina -d -p afina.pid
Запустит приложение, в файле afina.pid будет записан номер процесса afina. Процесс должен оставаться жить после закрытия терминала и после завершения текущего сеанса пользователя, должен иметь родителем init или systemd.
Для того, чтобы послать сигнал TERM
и остановить запущенный процесс можно использовать команду ниже:
[user@domain build] kill -TERM `cat afina.pid`