Skip to content

ДЗ Процессы

xphoenix edited this page Oct 1, 2017 · 1 revision

Домашнее задание 3 - потоки

Изучить 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`