Подтвердить что ты не робот

Как привязывает strace к уже запущенному процессу?

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

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

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

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

4b9b3361

Ответ 1

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.)

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

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

Нажмите Ctrl-C, чтобы абстрагировать трассировку с помощью strace.

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

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

Ответ 2

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

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

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