"Pgrp" - це процесна група . ps j
перелічує ідентифікатор групи процесів (стовпець називається PGID
). PGID процесу, як правило, сам або його батьківська група процесів, але їх можна довільно задати setpgid()
. Групи процесів контролюють, які процеси отримують сигнали управління роботою. Я думаю, що gdb переміщує процес у свою власну групу, щоб уникнути того, щоб процес отримував сигнали управління роботою, які б зіпсували контроль gdb над процесом.
Звіт про помилку стосується використання gdb з програмою, яка використовує sigwait
. sigwait
дозволяє процесу отримувати сигнал непомітно: замість того, щоб його доставляти до процесу звичайним чином, сигнал видаляється з чергової черги і sigwait
повертається. Це в основному корисно, щоб домогтися того, щоб сигнал завжди надходив до певної нитки: блокуйте сигнал, але потік споживає його запускаючи sigwait
.
Оскільки сигнал фактично не доставляється в процес, ptrace
нічого не бачить, і тому gdb не повідомляється про те, що процес недостатньо споживає сигнал.
Дискусія у звіті про помилки полягає у тому, чи слід ядро модифікувати так, щоб ptrace
бачити щось, коли сигнал поступає через нього sigwait
, чи чи gdb має вирішувати цю ситуацію по-іншому. Я недостатньо знаю про це, щоб стати стороною.