Назад | Перейти на главную страницу

Что в этом контексте pgrp?

Цитируется из Вот.

gdb помещает отлаженный процесс в свой собственный pgrp и устанавливает терминал на этот pgrp. (Попробуйте, например, ps j для PID gdb и отлаживаемой программы.)

И что это значит

ps j в PID gdb и отлаживаемой программы

это значит ps j PID?

Но я не получаю от этого ничего особенного ...

В основном я не понимаю, о чем идет речь в этой статье, может ли кто-нибудь объяснить это более подробно?

«Pgrp» - это группа процессов. ps j перечисляет идентификатор группы процессов (столбец называется PGID). PGID процесса - это обычно сам процесс или его родительская группа процессов, но его можно произвольно установить с помощью setpgid(). Группы процессов определяют, какие процессы получают сигналы управления заданиями. Я думаю, что gdb перемещает процесс в свою группу, чтобы избежать получения процессом сигналов управления заданиями, которые могут нарушить контроль gdb над процессом.

Отчет об ошибке касается использования gdb с программой, которая использует sigwait. sigwait позволяет процессу получать сигнал незаметно: вместо того, чтобы доставляться процессу обычным образом, сигнал удаляется из ожидающей очереди и sigwait возвращается. Это в основном полезно для того, чтобы сигнал всегда доставлялся определенному потоку: блокировать сигнал, но поток потребляет его, запустив sigwait.

Поскольку сигнал фактически не доставляется процессу, ptrace ничего не видит, и поэтому gdb не уведомляется о том, что процесс злонамеренно принял сигнал.

В отчете об ошибке идет дискуссия о том, нужно ли модифицировать ядро ​​так, чтобы ptrace что-то видит, когда сигнал расходуется через sigwait, или должен ли GDB обрабатывать эту ситуацию иначе. Я недостаточно знаю об этом, чтобы принять чью-то сторону.