【问题标题】:How can I test the effects of CLONE_VM, CLONE_FS, and CLONE_IO in C?如何在 C 中测试 CLONE_VM、CLONE_FS 和 CLONE_IO 的效果?
【发布时间】:2016-01-09 04:27:05
【问题描述】:

我试图了解这些标志的作用,我已经阅读了描述并进行了一些谷歌搜索,但我不知道在设置这些标志时如何测试子进程和父进程之间的区别。我可以运行哪些 C 函数或 linux 命令来帮助我查看这些标志的效果?

【问题讨论】:

  • 你想在这里理解什么? clone() 在容器和线程库的实现之外几乎没有什么用处。
  • 我正在使用 CLONE 并了解进程的名称空间等。我已经能够测试在子进程上设置其他标志的效果,但我不知道在设置这些标志时如何查看父进程和子进程之间的区别。因此,例如当我使用 CLONE_IO 时,让两个进程在相同的 IO 上下文中运行的效果是什么?我尝试使用 mount() 来测试 CLONE_FS 但我不确定我是否正确使用它。我要么想在 C 中测试它们,要么生成一个 Linux shell 并从终端测试它们。

标签: c linux io exec clone


【解决方案1】:

在我看来,CLONE_FS 的一个很好的例子是一个替代答案:“为什么cd 必须是一个内置的 shell?”

通常当您运行一个进程时,它们只共享某些信息,最明显的是打开文件描述符,而不是诸如“当前文件系统”之类的信息。

这意味着当cd 被实现为进程时,对chdir() 的调用将:

  1. 开始一个新进程

  2. 那个进程中chdir()被执行并且那个进程改变了目录

  3. 该过程结束并将控制权返回给一直在其所在目录中的父级

    CLONE_FS (since Linux 2.0)
           If CLONE_FS is set, the caller and the child process share the
           same filesystem information.  This includes the root of the
           filesystem, the current working directory, and the umask.  Any
           call to chroot(2), chdir(2), or umask(2) performed by the
           calling process or the child process also affects the other
           process.
    

现在假设您设置了CLONE_FS。注意:“这包括...当前工作目录...”。这意味着对chdir() 的调用不仅会影响当前正在运行的进程,还会影响当前命名空间中的进程。

我的所有描述几乎都在该段的最后一句话中总结:

如果 CLONE_FS 未设置,... 调用 chroot(2)、chdir(2) 或 umask(2) 稍后由其中之一执行 进程不影响其他进程。

【讨论】:

  • 另外:这就是我所说的滞后 :)
猜你喜欢
  • 2018-10-05
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-24
  • 2017-09-19
  • 1970-01-01
相关资源
最近更新 更多