Обработка сигналов в C ++ - PullRequest
0 голосов
/ 12 марта 2011

я новичок в c ++, я хочу знать, когда нам нужно использовать обработку сигналов в нашей программе? И я видел в некоторых кодах, что они разветвляются после установки сигнала, что здесь означает разветвление?

ТИА

Ответы [ 2 ]

4 голосов
/ 12 марта 2011

Я настоятельно рекомендую книгу Расширенное программирование в среде Unix, 2-е издание в качестве руководства по системному программированию.

fork(2) порождает новый процесс; это почти полностью клон текущего процесса. Но различия огромны: возвращаемое значение от fork(2) отличается у родителя и потомка, у потомка есть новый pid, новый ppid, и все файловые дескрипторы, у которых установлен флаг FD_CLOEXEC, будут закрыты в ребенок (подробности см. fcntl(2)). Есть и другие отличия, но это хорошее начало.

При настройке обработчиков сигналов необходимо учитывать следующее: Для установки обработчиков сигналов используйте sigaction(2), а не signal(3). signal(3) ненадежен и позволяет потерять сигналы. Вы не можете сделать много . Список разрешенных функций, которые вы можете вызывать в обработчике сигналов, находится на справочной странице signal(7). Использование функций вне этого списка опасно и может привести к очень сложным ошибкам. Вы также можете установить флаги в своей программе, которые проверяются вашим основным циклом событий, чтобы вы могли без проблем выходить или печатать статус или перезагружать файлы конфигурации в подходящее время.

1 голос
/ 12 марта 2011

Fork - это встроенная функция в C, которая заставляет программу создавать свой дочерний экземпляр, который начинает выполнение с того момента, когда был вызван fork. Оболочка разветвляется перед выполнением команды, что хорошо, потому что, если команда вызывает сбой или зависание, раздвоенный экземпляр программы может быть уничтожен при сохранении активности родителя.

...