linux clone()返回-1作为child_pid

时间:2017-07-07 06:57:36

标签: c linux docker

我有以下程序:

#define _GNU_SOURCE
#include<sched.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/wait.h>
#include<unistd.h>

static char child_stack[2048];

static int child_fn() {
    printf("Pid: %ld\n", (long) getpid());
    return 0;
}

int main() {
    pid_t child_pid = clone(child_fn, child_stack+1024, CLONE_NEWPID | CLONE_NEWNS | SIGCHLD, NULL);
    printf("clone()= %ld\n", (long) child_pid);

    waitpid(child_pid, NULL, 0);
    return 0;
}

我得到以下输出

# ./clone                                                                                                       
clone()= -1

任何人都可以帮助我理解为什么会这样吗?

  

注意:我使用dockerubuntu:latest图像下运行此功能。另请注意,提示为#而非$,因此它与运行此流程的用户有关,在这种情况下可能为root

1 个答案:

答案 0 :(得分:1)

正如评论中所提到的,我使用strerror(3)来查找我收到错误的原因。错误是Operation not permitted。我搜索了一下它并找到了解决方案 - clone: operation not permitted

所以要修复它,我所要做的就是用--privileged标志运行我的docker容器