在 fork() 进程中,child 显然得到了一个新的内核堆栈,但 fork() 手册页没有提到这一点?



我正在经历fork()过程和执行的步骤,主要是为了详细了解父进程和子进程之间共享的内容和不共享的内容。

因此,在dup_task_struct()函数中,我可以清楚地看到它正在使用alloc_thread_stack_node()分配一个新堆栈(尽管与父节点位于同一 numa 节点上(,然后将其分配给将创建的子进程task_struct

stack = alloc_thread_stack_node(tsk, node);
.
.
tsk->stack = stack;

这意味着父级和子级不共享内核堆栈。

但是当我浏览fork()的手册页时,为了证实我的发现,我没有找到任何提及此类信息的内容。

有一个部分说父母和孩子不分享的事情

子进程是父进程的精确副本,但 对于以下几点:

但它没有提到内核堆栈。

我错过了什么吗?

Linux Programmer's Manual中的手册页从应用程序开发人员的角度描述了事物。

从那时起,进程只有用户部分(在用户空间模式下运行代码(,并且只描述与用户进程相关的属性。

内核状态的说明超出了该手册页的范围。此外,fork是POSIX标准的一部分,Linux并不是唯一实现该标准的操作系统。其他操作系统可能有另一个内核部分,它在fork上的行为不同。

最新更新