Что такое 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 должен обрабатывать эту ситуацию по-другому. Я не знаю достаточно об этом, чтобы принять сторону.

Другие вопросы по тегам