2011-07-12 7 views
5

Gdy proces jest przymocowany gdb, STAT procesu „T”, takie jak:Jak sprawdzić, który proces (stat: T) jest dołączony przez gdb?

root  6507 0.0 0.0 67896 952 ?  Ss 12:01 0:00 /mytest 
root  6508 0.0 0.0 156472 7120 ?  Sl 12:01 0:00 /mytest 
root  26994 0.0 0.0 67896 956 ?  Ss 19:59 0:00 /mytest 
root  26995 0.0 0.0 156460 7116 ?  Tl 19:59 0:00 /mytest 
root  27833 0.0 0.0 97972 24564 pts/2 S+ 20:00 0:00 gdb /mytest 

Z powyższego 26995 można debuging. Skąd mam wiedzieć, że 26995 jest debugowany, czy nie? Czy mogę wiedzieć, który to proces jest dołączony przez gdb (27833)

pstree -p 27833 --- pokaz gdb (27833)

Kolejne pytanie: Jak poznać proces (stat: T) jest przymocowany który gdb (PID)? W większości przypadków nie jestem peononem, który debuguje ten proces.

Odpowiedz

7

Wyjście T w ps oznacza "bycie ptrace() d". Tak więc ten proces (26995) jest śledzony przez coś. To coś jest najczęściej GDB lub strace.

Więc tak, jeśli wiesz, że jesteś tylko działa GDB i nie strace, a jeśli pojawi się jeden proces w T stanie, to wiesz, że jesteś debugowanie tego procesu.

Można też zapytać GDB który to proces (y) jest debugowanie:

(gdb) info process 
(gdb) info inferior 

Aktualizacja Jak Matthew Slattery słusznie zauważył, T po prostu oznacza, że ​​proces jest zatrzymany, a nie, że jest ono ptrace()d .

Dlatego lepszym rozwiązaniem jest, aby to zrobić:

grep '^TracerPid:' /proc/*/status | grep -v ':.0' 
/proc/7657/status:TracerPid: 31069 

Z góry wyjściu Można powiedzieć, że proces 7657 jest śledzony przez proces 31069. Ten odpowiada zarówno „których proces jest debugger” i „który debuggera debuguje to, co ".

+1

'T' oznacza po prostu "zatrzymany", niekoniecznie" bycie ptrace() d ". Na przykład spróbuj 'spać 10000', naciśnij Ctrl-Z, następnie' ps ux | grep sleep'. –

+0

Dzięki, masz rację. Odpowiedź zaktualizowana. –

+0

W GDB 7.8, 'proces informacyjny' już nie istnieje. Zarówno 'info proc' lub' info program' show PID. –

0

Możesz dowiedzieć się tej informacji z wyjścia ps axf.

1357 ?  Ss  0:00 /usr/sbin/sshd 
1935 ?  Ss  0:00 \_ sshd: [email protected]/0 
1994 pts/0 Ss  0:00  \_ -bash 
2237 pts/0 T  0:00   \_ gdb /bin/ls 
2242 pts/0 T  0:00   | \_ /bin/ls 
2243 pts/0 R+  0:00   \_ ps axf 

Tutaj proces 2242 jest debuged przez proces gdb 2237. System plików

5

/proc jest konstrukcja telent Linux. Wiele informacji procesowych w czasie rzeczywistym można znaleźć pod adresem /proc/{PID}/.

Kolejne pytanie: Jak poznać proces (stat: T) jest przymocowany za pomocą którego gdb (PID)? W większości przypadków nie jestem peonem, który debuguje proces .

Na to pytanie możemy sprawdzić/proc/{PID}/plik statusu, aby uzyskać odpowiedź.

root  14616 0.0 0.0 36152 908 ?  Ss Jun28 0:00 /mytest 
root  14617 0.5 0.0 106192 7648 ?  Sl Jun28 112:45 /mytest 
tachyon 2683 0.0 0.0 36132 1008 ?  Ss 11:22 0:00 /mytest 
tachyon 4276 0.0 0.0 76152 20728 pts/42 S+ 11:22 0:00 gdb /mytest 
tachyon 2684 0.0 0.0 106136 7140 ?  Tl 11:22 0:00 /mytest 

host1-8> cat/proc/2684/status

Name: mytest 
State: T (tracing stop) 
SleepAVG:  88% 
Tgid: 2684 
Pid: 2684 
PPid: 2683 
TracerPid:  4276 
....... 

Zatem wiemy 2684 jest debug przez proces 4276.

Powiązane problemy