Что такое pgrp в этом контексте?
Цитируется здесь.
GDB помещает отлаживаемый процесс в свой собственный pgrp и устанавливает терминал в этот pgrp. (Попробуйте, например, ps j для PID gdb и отлаживаемой программы.)
И что это значит
PS на PID GDB и вашей программы отлаживается
это значит ps j PID
?
Я не получаю ничего особенного от этого, хотя...
По сути, я не понимаю, о чем идет речь в этой статье. Может кто-нибудь объяснить это более подробно?
1 ответ
"Pgrp" - это группа процессов. ps j
перечисляет идентификатор группы процессов (столбец называется PGID
). PGID процесса обычно сам по себе или группа процессов его родителя, но может быть произвольно установлен с помощью setpgid()
, Группы процессов контролируют, какие процессы получают сигналы управления заданиями. Я думаю, что GDB перемещает процесс в свою собственную группу, чтобы избежать получения процессом сигналов управления, которые могут испортить контроль GDB над процессом.
Отчет об ошибке об использовании GDB с программой, которая использует sigwait
, sigwait
позволяет процессу получать сигнал скрытно: вместо того, чтобы доставляться процессу обычным способом, сигнал удаляется из очереди ожидания и sigwait
возвращается. Это в основном полезно для организации того, чтобы сигнал всегда доставлялся определенному потоку: блокируйте сигнал, но поток потребляет его, выполняя sigwait
,
Поскольку сигнал фактически не доставляется процессу, ptrace
ничего не видит, и поэтому GDB не уведомляется о том, что процесс неуверенно потребляет сигнал.
Дискуссия в отчете об ошибках заключается в том, нужно ли модифицировать ядро так, чтобы ptrace
видит что-то, когда сигнал потребляется через sigwait
или GDB должен обрабатывать эту ситуацию по-другому. Я не знаю достаточно об этом, чтобы принять сторону.