
Если взглянуть на картинку выше, то в этом списке ты не найдёшь сигналов с номерами 32 и 33. Список сформирован командой kill -l.
И куда же, блядь, эти сигналы делись?
А всё просто: сигналы с номерами 32 и 33 в современных Linux-дистрибутивах зарезервированы для использования библиотекой glibc. И используются для реализации механизма потоков (threads).
Исходник glibc, где он резервирует эти сигналы. Можешь увидеть, что они будут необязательно 32 и 33.
static int current_rtmin = __SIGRTMIN + 2;
static int current_rtmax = __SIGRTMAX;
Один из сигналов может быть использован для внутренних коммуникаций между потоками. Второй может служить для управления потоками на уровне ядра.
Сигналы же, начинающиеся с номера 34, называются сигналами реального времени. Более подробно про сигналы реального времени можешь почитать тут.
Если попытаться отправить сигнал 32 или 33 вручную процессу, то получишь хуй с маслом. Ядро эти сигналы обрабатывать не будет.
kill -32 10929
Unknown signal 32
Чтобы убедиться, что сигналы 32 и 33 не являются сигналами реального времени, можно написать такой тест:
#include <stdio.h>
#include <signal.h>
int main() {
printf("SIGRTMIN: %d\n", SIGRTMIN);
printf("SIGRTMAX: %d\n", SIGRTMAX);
return 0;
}
Скомпилировать и запустить:
gcc -o signals signals.c
./signals
В ответ ты получишь что-то подобное:
SIGRTMIN: 34
SIGRTMAX: 64
Test Passed! Сигналы реального времени начинаются с 34. Но опять же не факт, что в твоём дистрибутиве будет так же. Мож, ты всё ещё на Slackware сидишь.
А нахуя нужны сигналы реального времени?
Давай лучше завтра, сегодня мы разбирались, куда делись сигналы 32 и 33. Не хочу раздувать этот пост и пугать тебя раньше времени СИськастым кодом.
Увидимся!








Комментарии