我有以下程序:
#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
任何人都可以帮助我理解为什么会这样吗?
注意:我使用
docker
在ubuntu:latest
图像下运行此功能。另请注意,提示为#
而非$
,因此它与运行此流程的用户有关,在这种情况下可能为root
?
答案 0 :(得分:1)
正如评论中所提到的,我使用strerror(3)
来查找我收到错误的原因。错误是Operation not permitted
。我搜索了一下它并找到了解决方案 - clone: operation not permitted
所以要修复它,我所要做的就是用--privileged
标志运行我的docker容器