Я настоятельно рекомендую книгу Расширенное программирование в среде Unix, 2-е издание в качестве руководства по системному программированию.
fork(2)
порождает новый процесс; это почти полностью клон текущего процесса. Но различия огромны: возвращаемое значение от fork(2)
отличается у родителя и потомка, у потомка есть новый pid
, новый ppid
, и все файловые дескрипторы, у которых установлен флаг FD_CLOEXEC
, будут закрыты в ребенок (подробности см. fcntl(2)
). Есть и другие отличия, но это хорошее начало.
При настройке обработчиков сигналов необходимо учитывать следующее: Для установки обработчиков сигналов используйте sigaction(2)
, а не signal(3)
. signal(3)
ненадежен и позволяет потерять сигналы. Вы не можете сделать много . Список разрешенных функций, которые вы можете вызывать в обработчике сигналов, находится на справочной странице signal(7)
. Использование функций вне этого списка опасно и может привести к очень сложным ошибкам. Вы также можете установить флаги в своей программе, которые проверяются вашим основным циклом событий, чтобы вы могли без проблем выходить или печатать статус или перезагружать файлы конфигурации в подходящее время.