我想使用
是否有与经典的
我已经熟悉了
clone
函数的命名空间功能。阅读手册,似乎clone
有许多复杂的细节需要关注。是否有与经典的
fork()
相当的clone
调用?我已经熟悉了
fork
,并且认为如果我有一个clone
的起点,我可以从那里添加标志和选项。我认为这个会起作用,但是我对一些指针参数并不完全确定。
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 );
unshare
只支持 clone
标志的一小部分。例如,我想使用 CLONE_NEWNET
,但它返回 EINVAL
。 - Stéphan Kochenclone() 用于创建线程。clone() 和 fork() 的最大区别在于,clone() 是为了从一个单独的入口点 - 函数开始执行,而 fork() 只是从调用它的代码中的同一点继续向下执行。在 manpage 定义中的 int (*fn)(void *) 是函数,退出时返回一个 int 值,即退出状态。
与 clone 最接近的调用是 pthread_create(),它本质上是 clone() 的包装器。但这并不能让你获得 fork() 的行为。
clone
和fork
之间的fn
与return
差异。我的目标是了解如何获得相同的子进程特性(以及它们是什么)。无论如何,pthread_create
都没有为我提供命名空间标志。 - Stéphan Kochen
clone
只是一个非常薄的包装器,主要是做必要的工作来在新堆栈上调用fn
。sys_clone
实际上像fork
一样返回,但不能直接调用,因为它的签名因架构而异。fork
实际上相当臃肿:它执行回调,进行杂项清理,但基本上只使用SIGCHLD。(我想我无法模拟fork
的额外功能。) - Stéphan Kochen