我正在尝试调试linux用户空间应用程序,该应用程序使用setpgid(0,0)
创建了一个进程组。在终端上启动时,它不返回错误并按预期工作。但是,在使用gdb
进行调试时,它将返回EPERM
。
我怀疑这是因为gdb小时候附加了我的进程。因此,无法使用setpgid(0,0)
将我的进程设置为父进程。那是对的吗?如果是这样,是否没有办法使用gdb
来调试这种情况?
修改:
环境:
Ubuntu 12.04 Kernel 3.11.0-15-generic
使用以下简单代码,如果在终端上启动,我将得到success!!
。如果我使用gdb(在Eclipse Luna上配置)进行调试,则会得到setpgid: Operation not permitted
。
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
int err = setpgid((pid_t)0, (pid_t) 0);
if (err < 0)
perror("setpgid");
else
printf("success!! \n");
exit(err);
}