C系统编程克隆()标志位值和操作

C系统编程克隆()标志位值和操作,c,linux,C,Linux,我对C语言的系统编程非常陌生,我查看了clone()的手册页,它有一系列标志。它还为您提供了一个示例: pid = clone(childFunc, stackTop, CLONE_NEWUTS | SIGCHLD, argv[1]); 第一个问题,我查看了clone()的手册页,它没有为标志提供任何数字值,但它确实提到“标志也可能是按位或与以下零个或多个常量相加的”。在哪里可以找到这些标志的数值 第二,这句话背后的逻辑是什么 CLONE_NEWUTS | SIGCHLD 这里到底发生了什么

我对C语言的系统编程非常陌生,我查看了clone()的手册页,它有一系列标志。它还为您提供了一个示例:

pid = clone(childFunc, stackTop, CLONE_NEWUTS | SIGCHLD, argv[1]);
第一个问题,我查看了clone()的手册页,它没有为标志提供任何数字值,但它确实提到“标志也可能是按位或与以下零个或多个常量相加的”。在哪里可以找到这些标志的数值

第二,这句话背后的逻辑是什么

CLONE_NEWUTS | SIGCHLD

这里到底发生了什么?我知道按位OR,但它与这些标志有什么关系?对这两个标志进行ORing的结果是什么?

第一个问题:

请参阅系统的“sched.h”以获得克隆(可能是0x04000000),而“SIGCHLD”则是“signal.h”(可能是20)。如果您查看“sched.h”,您可能会发现信号掩码(CSIGNAL)设置为0x000000FF,这将导致问题2

第二个问题:

从Linux手册页(man7.org)中:

如果设置了CLONE_NEWUTS,则在新的UTS中创建进程 命名空间,其标识符通过复制 来自调用进程的UTS命名空间的标识符。 如果未设置此标志,则(与fork(2)一样)进程将被取消 在与调用进程相同的UTS命名空间中创建。 此标志用于实现容器

标志的低位字节包含子级死亡时发送给父级的终止信号的编号。如果此信号被指定为SIGCHLD以外的任何内容,则在使用wait(2)等待子进程时,父进程必须指定_WALL或_WCLONE选项。如果未指定信号,则当子进程终止时,不会向父进程发送信号


我建议这样做——在一个新的UTS命名空间中创建克隆进程,并在终止后用SIGCHLD向父进程发出信号。

我不明白为什么要进行下一票?