2011-07-12 12 views
5

Cuando un proceso está unido por BGF, la estadística del proceso es "T", como:¿Cómo saber qué proceso (stat: T) está conectado por 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 

De lo anterior, 26.995 puede ser debuging. ¿Cómo puedo saber que 26995 es depuración o no? O puedo saber qué proceso está unido por GDB (27833)

pstree -p 27833 --- espectáculo GDB (27833)

Otra pregunta: ¿Cómo sabe un proceso (dato: T) está unido por qué gdb (PID)? En la mayoría de los casos, no soy el peón que está depurando el proceso.

Respuesta

7

La salida T en ps significa "siendo ptrace() d". Para que ese proceso (26995) esté siendo rastreado por algo. Ese algo con más frecuencia es GDB o strace.

Así que sí, si usted sabe que sólo se está ejecutando GDB y no strace, y si ves un solo proceso en T estado, entonces usted sabe que está depurando el proceso.

También se puede pedir GDB cuales proceso (s) es la depuración:

(gdb) info process 
(gdb) info inferior 

actualización Como observó correctamente Mateo Slattery, T sólo significa que el proceso se detiene, y no es que está siendo ptrace()d .

Así que una solución mejor es hacer esto:

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

Desde arriba de salida se puede decir que el proceso 7657 está siendo rastreado por el proceso de 31069. Esto responde tanto "procedimiento que está siendo depurador" y "el que depurador está depurando qué ".

+1

't' sólo significa "detenido", no necesariamente" siendo ptrace() d ". Por ejemplo, intente 'sleep 10000', presione Ctrl-Z, luego' ps ux | grep sleep'. –

+0

Gracias, estás en lo cierto. Respuesta actualizada –

+0

En GDB 7.8, 'proceso de información' ya no existe. Tanto 'info proc' como' info program' muestran PID. –

0

Puede encontrar esta información en ps axf salida.

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 

Aquí proceso 2242 está siendo debuged por el proceso de GDB 2237. sistema de archivos

5

/proc es un diseño telent de Linux. Se puede encontrar mucha información de proceso en tiempo real en /proc/{PID}/.

Otra pregunta: ¿Cómo se conoce un proceso (stat: T) mediante el cual gdb (PID)? En la mayoría de los casos, no soy el peón que está depurando el proceso .

Para esta pregunta, podemos verificar/proc/{PID}/archivo de estado para obtener la respuesta.

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/estado

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

Así sabemos 2684 es de depuración proceso de 4276.

Cuestiones relacionadas