C- что такое SIGUSR1 синтаксически

Когда я использую SIGUSR1 в функциях kill() или signal(), что он делает? Это макрос? Я прочитал, что это было определено пользователем, но где это определено? Могу ли я сделать SIGUSR10 (или программно создать "массив" сигналов разных типов)?

2 ответа

Решение

Пользовательские сигналы означают, что эти сигналы не имеют определенного значения в отличие от SIGSEGV, SIGCONT, SIGSTOPи т.д. Ядро никогда не отправит SIGUSR1 или SIGUSR2 процессу, поэтому значение сигнала может быть установлено вами в соответствии с потребностями вашего приложения. Все эти прописные SIG константы на самом деле являются макросами, которые будут расширяться до целого числа, указывающего номер сигнала в конкретной реализации. Хотя определяемые пользователем сигналы не обязательно должны быть определены, номера сигналов уже зафиксированы в конкретной реализации, и их можно безопасно переопределить, поскольку они не будут отправлены ничем, кроме пользователя.

Традиционно было два пользовательских сигнала: SIGUSR1 а также SIGUSR2, Однако в недавних реализациях есть нечто, называемое "сигналы реального времени POSIX", которые предлагают еще несколько пользовательских сигналов.

SIGUSR - это, как следует из названия, сигнал, зарезервированный для использования пользователем (разработчиком), без какого-либо "специального" предварительно определенного значения. Вы не можете сделать 10 из них, в большинстве систем POSIX их ровно две - SIGUSR1 и SIGUSR2.

Сам символ может быть, а может и не быть расширением макроса, но в конечном итоге станет числовым значением, совместимым с int.

Чтобы использовать его осмысленно, вам нужно написать обработчик сигнала. См. Справочную страницу signal(), чтобы узнать, как это сделать.

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