Отслеживание деревьев процессов

Я ищу примеры кода о том, как использовать системный вызов Linux ptrace() для отслеживания системных вызовов процесса и всех его дочерних, внучатых и т. д. процессов. Подобно поведению strace, когда ему передается флаг ветвления -f.

Я знаю об альтернативе изучения источников strace, но я прошу сначала чистый учебник в надежде получить более изолированное объяснение.

Я собираюсь использовать это для реализации быстрого универсального мемоайзера системных вызовов, похожего на https://github.com/nordlow/strace-memoize, но написанный на скомпилированном языке. Текущие примеры кода, которые я хочу расширить с помощью этой логики, — это ответвление ministrace по адресу https://github.com/nordlow/ministrace/blob/master/ministrace.c


person Nordlöw    schedule 14.02.2017    source источник


Ответы (1)


RTFM PTRACE_SETOPTIONS с флагами PTRACE_O_TRACECLONE, PTRACE_O_TRACEFORK и PTRACE_O_TRACEVFORK. Короче говоря, если вы установите его для процесса, каждый раз, когда он создает дочерние элементы, они также будут автоматически отслеживаться.

person Shachar Shemesh    schedule 20.02.2017