我是C语言中的系统编程新手,我在查看clone()的手册页,它有一堆标志。它还给出了一个例子:
pid = clone(childFunc, stackTop, CLONE_NEWUTS | SIGCHLD, argv[1]);
第一个问题,我查看了clone()的手册页,它没有给你任何数字值的标志,但它确实提到"标志也可能是按位 - 或&#39 ; ed以零个或多个以下常量"。我在哪里可以找到这些标志的数值。
其次,声明背后的逻辑是什么
CLONE_NEWUTS | SIGCHLD
这里到底发生了什么?我知道按位OR,但它对这些标志有什么作用以及ORing这两个标志的结果是什么?
答案 0 :(得分:1)
第一个问题:
查看您的系统" sched.h"对于CLONE_NEWUTS(可能是0x04000000)和" signal.h"对于SIGCHLD(可能是20)。如果你看看" sched.h"您可能会发现信号掩码(CSIGNAL)设置为0x000000FF,这会引发问题2 ......
第二个问题:
来自Linux手册页(man7.org):
如果设置了CLONE_NEWUTS,则在新的UTS中创建进程 命名空间,其标识符通过复制初始化 来自调用进程的UTS名称空间的标识符。 如果未设置此标志,则(与fork(2)一样)进程为 在与调用进程相同的UTS名称空间中创建。 此标志用于实现容器。
和
标志的低字节包含子节点死亡时发送给父节点的终止信号的数量。如果将此信号指定为SIGCHLD以外的任何信号,则父进程在等待具有wait(2)的子进程时必须指定__WALL或__WCLONE选项。如果未指定信号,则子进程终止时不会发出父进程的信号。
我建议这样做 - 在新的UTS名称空间中创建克隆过程,并在终止后通过SIGCHLD向父进程发出信号。