Чтобы специалисты «миницифер», смогли локально у себя его развернуть и всё проверить.
Ну это ладно, вся соль в том, что нужно это подробно и в мельчайших подробностях расписать (без матов).
От начала создания сервера (консольные команды, пайплайны, апстримы, фаерволы и т.п.) и заканчивая — а теперь открываем браузер и видим главную страницу нашего приложения. Отдать код ансибла — не канает. Заебись да?
Короче пезда какая-то, чувствую себя как ребенок, который ненавидит делать домашку. Ладно, лирика. Поехали по сегодняшней теме.
✔️ Как узнать какие сигналы слушает процесс
Требуется проверить поймает ли запущенный процесс сигнал, проигнорирует или заблокирует его. Короче нужен список сигналов для конкретного приложения.
➡️ Про сигналы писал тут и тут
В Linux ты можешь найти PID процесса, а затем посмотреть:
cat /proc/$PID/status
В выхлопе будут строки описывающие какие сигналы
SigBlk - заблокированы
SigIgn - проигнорированы
SigCgt - перехвачены
Для примера беру PID=1, получаю такое:
SigBlk: 0000000000000000
SigIgn: fffffffe57f0d8fc
SigCgt: 00000000280b2603
Роман ты заебал! Опять какие-то шифры нечитабельные.
Давай разберемся что это значит.
Все эти числа справа, являются битовой маской. Если преобразовать это из шестнадцатеричного в двоичный, то каждый 1 бит представляет собой пойманный сигнал, считая справа налево, начиная с 1.
Итак, интерпретируя строку SigCgt, видим, что мой init процесс улавливает следующие сигналы:
00000000280b2603 ==> 101000000010110010011000000011
На телефонах вся эта поебота выглядит очень стрёмно, поэтому смотрим картинку к этому посту 👆
Как сопоставить числовые сигналы с именем? Я выполнил команду:
kill -l
И получил список всех сигналов от 1-31, а дальше уже дело техники.
И помним, что мы не можем заблокировать сигнал, если программа не готова к его перехвату. Если сигнал не был пойман, происходит действие по умолчанию, обычно это — завершение процесса.
Нахера всё это нужно? Ну если ты рядовой потребитель, то конечно оно тебе и не нужно. А если ты «автомеханик», то извините, хош не хош, а как оно внутри работает знать обязан.
Вот те скрипт, который покажет какие сигналы прослушивает программа. Да, скрипт преобразует криптошифры в нормальные имена сигналов. Избавляю вас от еботни, как говорится все для вас мои дорогие подписчики 🙃
#!/bin/bash
set -e
grep -m3 -P '^Sig(?:Blk|Ign|Cgt):' "/proc/$1/status" | while read field value
do
bits=$(printf 'ibase=16; obase=2; %X\n' '0x'$value | bc)
sigs=()
i=0
while [[ $bits ]]
do
((++i))
[[ ${bits:$((${#bits} - 1))} -eq 1 ]] && sigs+=($i)
bits=${bits::-1}
done
(( ${#sigs[*]} )) && sigs=( $(kill -l ${sigs[*]}) )
echo $field ${sigs[*]}
done
exit
При запуске нужно указать PID процесса:
script.sh <pid>Вроде всё. Если есть чо добавить, велком в комменты. Ну и всех с пятницей, хороших предстоящих выходных, берегите себя!
Пользуйтесь!
tags: #bash #linux #debug
—
🔔 @bashdays
