Как strace подключается к уже запущенному процессу? - PullRequest
29 голосов
/ 20 сентября 2011

Я знаю, что strace использует ptrace для выполнения работы,

, но для этого нужно запустить целевой процесс с TRACE_ME,

, которые не применяются в случае уже запущенного процесса.

как это работает в уже запущенном процессе?

Ответы [ 2 ]

25 голосов
/ 28 февраля 2014

strace -p <PID> ----> Чтобы прикрепить процесс к strace . Параметр «-p» предназначен для PID процесса.

strace -e trace=read,write -p <PID> -> Этим вы также можете отслеживать процесс / программу для события, такого как чтение и запись (в этом примере). Так что здесь он будет печатать все такие события, которые включают системные вызовы чтения и записи процессом.

Другие подобные примеры

-e trace= network  (Trace all the network related system calls.)

-e trace=signal    (Trace all signal related system calls.)

-e trace=ipc       (Trace all IPC related system calls.)

-e trace=desc      (Trace all file descriptor related system calls.)

-e trace=memory    (Trace all memory mapping related system calls.)

и многие другие ..

trace - это одна из многих опций, которые вы можете использовать с опцией -e .

Нажмите Ctrl-C , чтобы прервать трассировку по линии.

Проверьте HELP раздел для краткой сводки по strace , набрав strace -h и man страница для подробной информации.

ПРИМЕЧАНИЕ : Отслеживаемый процесс выполняется медленно.

13 голосов
/ 24 сентября 2011

Детали ptrace() зависят от ОС.

В Linux ребенок может запросить отслеживание его родителем с помощью ptrace(PTRACE_TRACEME, ...); но, альтернативно, процесс может присоединиться к другому процессу с ptrace(PTRACE_ATTACH, ...).

См. Справочную страницу Linux ptrace(2) (и, если вам действительно нужны мелкие детали, источник strace и источник ядра, начиная с kernel/ptrace.c).

...