使用gdb调试时setpgid(0,0)失败

时间:2018-09-06 14:03:40

标签: c linux gdb

我正在尝试调试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); 
}

0 个答案:

没有答案