Как узнать, какой процесс (stat: T) подключен к GDB? - PullRequest
5 голосов
/ 12 июля 2011

Когда процесс присоединяется к GDB, его статистика равна «T», например:

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

Из вышесказанного 26995 может быть отладкой.Как я могу узнать, 26995 отладка или нет?Или я могу узнать, к какому процессу прикреплен gdb (27833)

pstree -p 27833 --- show gdb (27833)

Еще один вопрос: как узнать процесс (stat: T) к какому gdb (PID) прикреплен? В большинстве случаев я не являюсь человеком, который отлаживает процесс.

Ответы [ 3 ]

8 голосов
/ 12 июля 2011

Выход T в ps означает «будучи ptrace () d». Так что этот процесс (26995) отслеживается как что-то . Это что-то чаще всего либо GDB, либо strace.

Так что да, если вы знаете, что выполняете только GDB, а не strace, и если вы видите один процесс в состоянии T, то вы знаете, что отлаживаете этот процесс.

Вы также можете спросить GDB, какой процесс (ы) он отлаживает:

(gdb) info process
(gdb) info inferior

Обновление Как правильно заметил Мэтью Слэттери, T просто означает, что процесс остановлен, а не то, что он ptrace()d.

Так что лучшим решением будет сделать это:

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

Из вышеприведенного вывода вы можете сказать, что процесс 7657 отслеживается процессом 31069. Это отвечает как «какой процесс отладчик», так и «какой отладчик что отлаживает».

5 голосов
/ 13 июля 2011

/ proc файловая система - это щедрый дизайн Linux. Много информации о процессах в реальном времени можно найти в / proc / {PID} / .

Другой вопрос: как узнать, к какому процессу прикреплен (stat: T) GDB (PID)? В большинстве случаев я не тот человек, который отлаживает процесс.

По этому вопросу мы можем проверить / proc / {PID} / файл состояния, чтобы получить ответ.

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

Таким образом, мы знаем, что 2684 отлаживается процессом 4276.

0 голосов
/ 12 июля 2011

Вы можете узнать эту информацию из вывода ps axf.

 1357 ?        Ss     0:00 /usr/sbin/sshd
 1935 ?        Ss     0:00  \_ sshd: root@pts/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

Здесь процесс 2242 отлаживается процессом gdb 2237.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...