我想使用clone
函数的命名空间功能。阅读联机帮助页,似乎clone
有许多复杂的细节我需要担心。
是否有一个等效的clone
调用好的fork()
?
我已经熟悉fork
,并且相信如果我在clone
中有一个起点,我可以从那里添加标记和选项。
答案 0 :(得分:2)
我认为这会有效,但我并不完全确定某些指针参数。
pid_t child = clone( child_f, child_stack,
/* int flags */ SIGCHLD,
/* argument to child_f */ NULL,
/* pid_t *pid */ NULL,
/* struct usr_desc * tls */ NULL,
/* pid_t *ctid */ NULL );
在flags参数中,它的低字节用于指定发送哪个信号以通知线程的父节点执行死亡或停止操作。我相信所有实际标志都会打开与fork
不同的开关。查看内核代码表明情况就是这样。
如果您真的希望得到接近fork
的内容,您可能需要调用不带函数指针的sys_clone
,而是返回两次,如fork
。
答案 1 :(得分:1)
您可以使用fork()派生一个普通的子进程,然后使用unshare()创建一个新的命名空间。
命名空间有点奇怪,我看不到很多用例。
答案 2 :(得分:0)
clone()用于创建线程。 clone()和fork()之间的最大区别在于clone()意味着从一个单独的入口点开始执行 - 一个函数,而fork()只是从调用where的代码中的同一点继续向下。 manpage定义中的int(* fn)(void *)是函数,它在退出时返回一个int,退出状态。
最接近克隆的调用是pthread_create(),它实际上是clone()的包装器。 这不会让你获得fork()行为。