Разница между SIGUSR1 и SIGUSR2

Читая рукопись для сигналов, я наткнулся на таблицу сигналов и увидел, что есть два определенных сигнала для usr SIGUSR1 и SIGUSR2. Есть ли разница между этими двумя? Если да, то когда я должен использовать один поверх другого? Если нет разницы, почему два сигнала служат одной цели?

2 ответа

Решение

У вас есть два сигнала для ваших собственных нужд. Гарантируется, что система никогда не доставит их вашим процессам, поэтому вы можете добавить к ним любую семантику. Почему два? Чисто произвольный; только один наверняка был бы грязным, поэтому они дают нам два, но они могли бы дать гораздо больше. Это произвольная степень свободы в отношении связи на основе сигналов.

Я думаю, что в большинстве случаев этого достаточно. Лично я никогда не использовал больше, чем оба, определяемые пользователем одновременно... Такой сигнал используется, например, для предупреждения сервера, выполняющего какую-либо трудоемкую задачу, о том, что что-то особенное нужно сделать "срочно": читать что-то в канал связи, остановка текущей задачи и т. д. Если вам нужно более двух пользовательских сигналов, это, вероятно, означает, что вы сделали плохой дизайн и перенапрягли их использование. Помните, что использование перехвата сигналов вызывает некоторый параллелизм в вашем собственном коде, что серьезно влияет на его дизайн.

Насколько я понимаю, между ними нет разницы (кроме их ценностей). Оба зарезервированы для пользователя, и они должны выбрать, как их использовать. Они могут служить одной и той же цели (что-то сигнализировать), но могут использоваться для сигнализации о разных вещах.

Вот действительно хороший пример этого. Вы можете сосредоточиться только на создании и обработке сигнала. Обратите внимание, что оба SIGUSR1 а также SIGUSR2 обрабатываются одним и тем же обработчиком, но вы можете дать им разные значения.

Другие вопросы по тегам