C- что такое SIGUSR1 синтаксически
Когда я использую SIGUSR1 в функциях kill() или signal(), что он делает? Это макрос? Я прочитал, что это было определено пользователем, но где это определено? Могу ли я сделать SIGUSR10 (или программно создать "массив" сигналов разных типов)?
2 ответа
Пользовательские сигналы означают, что эти сигналы не имеют определенного значения в отличие от SIGSEGV
, SIGCONT
, SIGSTOP
и т.д. Ядро никогда не отправит SIGUSR1 или SIGUSR2 процессу, поэтому значение сигнала может быть установлено вами в соответствии с потребностями вашего приложения. Все эти прописные SIG
константы на самом деле являются макросами, которые будут расширяться до целого числа, указывающего номер сигнала в конкретной реализации. Хотя определяемые пользователем сигналы не обязательно должны быть определены, номера сигналов уже зафиксированы в конкретной реализации, и их можно безопасно переопределить, поскольку они не будут отправлены ничем, кроме пользователя.
Традиционно было два пользовательских сигнала: SIGUSR1
а также SIGUSR2
, Однако в недавних реализациях есть нечто, называемое "сигналы реального времени POSIX", которые предлагают еще несколько пользовательских сигналов.
SIGUSR - это, как следует из названия, сигнал, зарезервированный для использования пользователем (разработчиком), без какого-либо "специального" предварительно определенного значения. Вы не можете сделать 10 из них, в большинстве систем POSIX их ровно две - SIGUSR1 и SIGUSR2.
Сам символ может быть, а может и не быть расширением макроса, но в конечном итоге станет числовым значением, совместимым с int.
Чтобы использовать его осмысленно, вам нужно написать обработчик сигнала. См. Справочную страницу signal(), чтобы узнать, как это сделать.