Фильтрация сотен дампов ядра по сигналу

Это зависит от оболочки; ZSH предлагает форму $\NNN

% perl -e 'printf "%vx\n", shift' $'\177'
7f
% 

Как в zsh, так и в kshдругим вариантом будет использование control+v , а затем возврат , который должен вставить ^Mв командную строку, хотя это может быть утомительным и может чрезмерно усложнить историю оболочки.

При их отсутствии другим вариантом является запуск программы, которая генерирует соответствующие символы.

% perl -e 'printf "%vx\n", shift' $( perl -e 'print "\x0F"' )
f
% 

Или использовать небольшую программу на C с соответствующими аргументами для вашей программы; это позволит избежать любых осложнений, которые может добавить оболочка

#include <err.h>
#include <unistd.h>

int main(void)
{
    execlp("perl", "perl", "-e", "printf \"%vx\\n\", shift", "\x0F",
           (char *) 0);
    err(1, "exec failed");
    return 1;
}
0
05.08.2019, 19:36
1 ответ

Частичный ответ:

Я заметил, что вы используете условное предложение, поэтому, если дампы ядра еще не сгенерированы, проще всего включить сигнал в имя при их создании. Подробности см. в man 5 core.

Если они у вас уже есть, ознакомьтесь с подробностями основного формата (, см., например. здесь). Я бы предположил, что номер сигнала находится в различных siginfo_tзаметках (, но не проверял это ), поэтому извлеките их любым способом, достаточно быстрым для вас (пользовательской программой на C, если необходимо )и отфильтруйте нужные сигналы.

1
28.01.2020, 02:39

Теги

Похожие вопросы