отфильтровать определенные процессы и / или pids в ftrace?

Я не уверен, думаю ли я об этом правильно (и, пожалуйста, поправьте меня, если я ошибаюсь), но следующее мое понимание ftrace.

В / sys / kernel / debug / tracing имеются следующие файлы:

set_ftrace_filter

который будет отслеживать только функции, перечисленные внутри,

set_ftrace_notrace

который будет отслеживать функции, не перечисленные внутри, и

set_ftrace_pid

который будет отслеживать процессы только с pid внутри.

Мой вопрос: есть ли способ настроить его так, чтобы ftrace только отслеживал процессы, у которых НЕ есть определенный pid (или имя процесса)?

Аналогия:

set_ftrace_filter: set_ftrace_notrace :: set_ftrace_pid: x

Существует ли x , и если да, то как его использовать?

Например, если бы я хотел проследить все процессы, кроме одного с pid 48, есть ли способ добавить что-то значение не 48 в set_ftrace_pid?

Я читал документацию и искал в Интернете, но я не могу найти способ достичь этого или это возможно.

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

Спасибо за ваше время!

    One Solution collect form web for “отфильтровать определенные процессы и / или pids в ftrace?”

    Я понял, как делать то, что я описывал, но это было немного противоречиво, поэтому я отправляю ответ здесь для людей, которые могут попасть на эту страницу при поиске ( tl: dr; внизу). Насколько я знаю, нет простого способа просто отфильтровывать процессы с определенным PID из ftrace так же легко, как это сказать, ТОЛЬКО рассматривать процессы с определенным PID, но в моем случае я забочусь только о необработанной системе звонки (sys_enter), и я узнал, как исключить записи с определенными идентификаторами PID для включения в них, и вот как это сделать:

    Каталог ftrace:

    / SYS / ядро ​​/ отладки / трассировки /

    Внутри есть каталог с названием « события ». Отсюда вы можете увидеть все, что может проследить ftrace, но для моего случая я перехожу в « raw_syscalls ».

    В raw_syscalls «два подкаталога: sys_enter и sys_exit .

    В sys_enter (и sys_exit, если на то пошло), существуют следующие файлы:

    включить

    фильтр

    формат

    Я бы

    вызывать

    « фильтр » – тот, который нам больше всего нравится сейчас, но формат имеет полезную информацию о полях записи, созданной ftrace, когда включен sys_enter:

    name: sys_enter ID: 17 format: field:unsigned short common_type; offset:0; size:2; signed:0; field:unsigned char common_flags; offset:2; size:1; signed:0; field:unsigned char common_preempt_count; offset:3; size:1; signed:0; field:int common_pid; offset:4; size:4; signed:1; field:long id; offset:8; size:8; signed:1; field:unsigned long args[6]; offset:16; size:48; signed:0; 

    Здесь мы заботимся о common_pid .

    Если вы хотите, чтобы ваша трассировка пропускала записи из процесса с PID n , вы должны редактировать

    / SYS / ядро ​​/ отладки / трассировки / События / raw_syscalls / sys_enter / фильтр

    Читать:

     common_pid != n 

    Если программа, которую вы пытаетесь игнорировать во время трассировки, имеет несколько потоков или несколько процессов, вы просто используете оператор &&. Предположим, вы хотите опустить процессы с помощью PID n , o и p , вы должны отредактировать файл, чтобы он читал:

     common_pid != n && common_pid != o && common_pid != p 

    Чтобы очистить фильтр, вы просто пишете « 0 » в файл:

    echo "0"> / sys / kernel / debug / tracing / events / raw_syscalls / sys_enter / filter

    … сделал бы трюк.

    enable должен содержать « 1 » для отслеживаемого события, а также tracing_on в каталоге ftrace. Запись в 0 превращает трассировку этого события (или все трассировки в случае tracing_on ).

    Для записи в эти файлы требуются права root.

    Это все, о чем я могу думать. Спасибо всем, кто прочитал / проголосовал за это, и я надеюсь, что мой ответ поможет кому-то. Если кто-то знает способ, который делает так, как я это делал, выглядите глупо, не стесняйтесь вызывать меня.

    tl; dr: чтобы отфильтровать записи из процесса 48, напишите:

     common_pid != 48 

    … в

    / SYS / ядро ​​/ отладки / трассировки / События / raw_syscalls / sys_enter / фильтр

    Отфильтруйте несколько PID (например, 48, 49, 53, 58), написав вместо этого:

     common_pid != 48 && common_pid != 49 && common_pid != 53 && common_pid !=58 

    Замените «events / raw_syscalls / sys_enter» на ваше желаемое событие и замените мои номера на любые PID, которые вы хотите игнорировать.

    Interesting Posts

    Как проверить функцию UPSTART для ubuntu, чтобы увидеть, как мой скрипт автоматически перезапускается, если он убит?

    Есть ли причина, почему первый элемент массива Zsh индексируется 1 вместо 0?

    Traceroute работает (очень медленно), но интернет не работает

    Запуск 64-битной ОС, поиск всех 32-битных программ в системе

    Кнопка завершения работы в XFCE перезапускает компьютер

    Автозаполнение для недоступных каталогов

    .bash_history vs history command

    Отказоустойчивость VM на KVM

    Две версии SSH

    Как случайным образом подмножить файл, а затем выбрать одинаковые номера строк из нескольких файлов

    Есть ли * реальная причина использования BackTrack?

    Отдельные мониторы с отдельным входом клавиатуры и мыши?

    Навыки, необходимые для хорошей работы Linux

    Поиск файлов с определенным размером внутри рекурсивных архивов на молнии

    Драйвер графической подсистемы Intel для Linux Mint 17

    Linux и Unix - лучшая ОС в мире.