web-dev-qa-db-fra.com

Comment strace se connecte-t-il à un processus déjà en cours?

Je sais que strace utilise ptrace pour faire le travail,

mais il doit exécuter le processus cible avec TRACE_ME sur,

qui ne s'appliquent pas dans le cas d'un processus déjà en cours.

comment ça marche sur un processus déjà en cours?

32
new_perl

strace -p <PID> ----> Pour attacher un processus à strace. L'option "-p" est pour [~ # ~] pid [~ # ~] du processus.

strace -e trace=read,write -p <PID> -> Par cela, vous pouvez également tracer un processus/programme pour un événement, comme lire et écrire (dans cet exemple). Donc, ici, il imprimera tous ces événements qui incluent les appels système en lecture et en écriture par le processus.

Autres exemples

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

et beaucoup plus..

trace est l'une des nombreuses options que vous pouvez utiliser avec l'option - e.

Appuyez sur Ctrl-C pour abandonner le traçage par strace.

Consultez la section [~ # ~] help [~ # ~] pour un bref résumé sur strace en tappant strace -h et man page pour des informations détaillées.

NOTE : Un processus tracé s'exécute lentement.

25
Prabhat Kumar Singh

Les détails de ptrace() sont spécifiques au système d'exploitation.

Sous Linux, un enfant peut demander à être tracé par son parent avec ptrace(PTRACE_TRACEME, ...); mais, alternativement, un processus peut s'attacher à un autre processus avec ptrace(PTRACE_ATTACH, ...).

Voir la page de manuel Linux ptrace(2) (et, si vous voulez vraiment les détails, --- strace source , et la source du noyau démarrant à kernel/ptrace.c ).

13
Matthew Slattery