Как привязывает strace к уже запущенному процессу?
Я знаю, что strace использует ptrace для выполнения задания,
но он должен запустить целевой процесс с TRACE_ME on,
которые не применяются для случая уже запущенного процесса.
как он работает с уже запущенным процессом?
Ответ 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, ...).