【发布时间】:2018-07-26 08:37:31
【问题描述】:
假设我在 Linux 中有一个字符设备驱动程序,它在内核中分配一些内存来针对每个打开的文件描述符存储一些状态。
某些进程在驱动程序上打开一个 fd,并且通过一些ioctls,该进程还为该状态提供了初始化参数。
现在进程分叉了。还将为子进程创建所有文件描述符。
如何复制 fd 特定状态? AFAIK do_fork 只复制内核知道的数据结构。
子进程是否必须重新初始化 fd,否则最终会与父进程共享状态?
【问题讨论】:
-
我的理解是正确的,您存储在内核中的状态是在您通过驱动程序中的 kmalloc 在内核中获得的一些内存中?
-
@yashC 状态存储在一些
kmalloc'd 内存中。 -
那么,你的'状态'存储在 kmalloced 内存中的内核行为将与其他 kmalloced 内存相同。即孩子将获得叉子未触及的数据。
-
@yashC 但现在孩子和父母都有相同的指针指向相同的 kmalloc 内存。这实质上意味着他们将共享状态,这可能不是预期的行为。
-
对谁的预期行为?你还是内核作者?
标签: linux-kernel fork linux-device-driver