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

时间:2017-02-23 03:45:59

标签: c linux

我是C语言中的系统编程新手,我在查看clone()的手册页,它有一堆标志。它还给出了一个例子:

pid = clone(childFunc, stackTop, CLONE_NEWUTS | SIGCHLD, argv[1]);

第一个问题,我查看了clone()的手册页,它没有给你任何数字值的标志,但它确实提到"标志也可能是按位 - 或&#39 ; ed以零个或多个以下常量"。我在哪里可以找到这些标志的数值。

其次,声明背后的逻辑是什么

CLONE_NEWUTS | SIGCHLD

这里到底发生了什么?我知道按位OR,但它对这些标志有什么作用以及ORing这两个标志的结果是什么?

1 个答案:

答案 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向父进程发出信号。