为什么do_fork()的clone_flags具有不同的命名约定?

时间:2016-02-25 03:47:53

标签: kernel history

最近我正在研究Linux内核编程,我发现了一些奇怪的东西。 clone_flagsdo_fork()的{​​{1}}列在<uapi/linux/sched.h>中,但我发现它们在语义方面有不同的命名约定。

clone_flags大致可分为以下几类:

  1. CLONE_VMCLONE_FSCLONE_FILES,...:CLONE_ABC表示父进程和子进程共享资源ABC
  2. CLONE_NEWNSCLONE_NEWIPCCLONE_NEWUSER,...:CLONE_NEWABC含义为子流程创建新的 ABC
  3. CLONE_SETTLS:这是为子进程创建新 TLS的唯一
  4. CLONE_IO:这是唯一一个克隆子进程的IO上下文
  5. 与资源共享方案没有密切关系的其他一些东西
  6. 我认为这些标志在命名约定方面有很大不同。为什么我们不能将NEW放在第二类中,只是将它们合并到第一类中。 CLONE_IO与第一类完全相反。

    这种奇怪的(我认为)情况有历史原因吗?或者是否有任何关于命名约定如何工作的解释?

1 个答案:

答案 0 :(得分:0)

  

为什么我们不能在第二类中删除NEW并将它们合并到第一类。

因为你可以乍一看告诉我们做了什么。如果flag包含NEW - 我们正在创建资源。 如果我们正在使用TID - 标记包含TIDCLONE_PARENT_SETTIDCLONE_CHILD_CLEARTIDCLONE_CHILD_SETTID)。 我发现这个命名惯例并不奇怪。