在这种情况下,pgrp 是什么?

在这种情况下,pgrp 是什么?

引自这里

gdb 将调试的进程放入其自己的 pgrp 中,并将终端设置为该 pgrp。(例如,在 gdb 和正在调试的程序的 PID 上尝试 ps j。)

这是什么意思

ps j 在 gdb 和正在调试的程序的 PID 上

这是什么意思ps j PID

但我并没有从中得到什么特别的东西...

基本上我不明白那篇文章在说什么,有人可以更详细地解释一下吗?

答案1

“pgrp” 是进程组.ps j列出进程组 ID(该列称为PGID)。进程的 PGID 通常是其本身或其父进程组,但可以使用 任意设置setpgid()。进程组控制哪些进程接收作业控制信号。我认为 gdb 将进程移动到其自己的组是为了避免让进程接收作业控制信号,从而扰乱 gdb 对进程的控制。

错误报告是关于使用 gdb 和一个使用sigwait.sigwait允许进程以不正当的方式接收信号:信号不是以通常的方式传递给进程,而是从待处理队列中移除并sigwait返回。这主要用于安排信号始终传递给特定线程:阻止信号,但让线程通过运行来使用它sigwait

由于信号实际上并未传递给进程,ptrace看不到任何内容,因此 gdb 不会收到进程已暗中消耗该信号的通知。

错误报告中的争论在于是否应该修改内核,以便ptrace在信号通过时看到一些东西sigwait,或者 gdb 是否应该以不同的方式处理这种情况。我对此了解不多,无法选边站。

相关内容