Документ по системному вызову read () говорит, что read()
немедленно возвращается, если он прерывается сигналом.Возвращаемое значение отражает количество успешно прочитанных байтов.Кажется, подразумевается, что некоторые системные вызовы имеют свои собственные обработчики сигналов.
Если read()
читает из канала (настроено pipe()
), но в канале нет доступного байта, поэтому read()
блокирует поток.Теперь, если я отправлю SIGINT
с терминала (по Ctrl + C), программа завершит работу.
Предположим, в начале программы я установил обработчик сигнала для SIGINT
, который печатает сообщение "SIGINT is received"
,Когда read()
блокируется, и я использую Ctrl + C, программа завершит работу с напечатанным этим сообщением или программа все еще будет молча завершаться, потому что SIGINT
уже обработан обработчиком сигнала read()
?
(Мой эксперимент предполагает, что это последний случай ... не уверен)