【发布时间】:2018-11-14 10:07:35
【问题描述】:
我是进程的初学者,仍在努力理解获取子进程和为其分配内存的目的,所以我的问题是:
第一季度。为什么Linux没有自动收割子进程的机制,我的意思是所有子进程一旦完成就会像垃圾回收一样被终止并删除,这样用户就不需要使用waitpid手动收割子进程了?
第二季度。我的教科书说,当用户使用 fork() 创建新的子进程时,子进程会获得父进程的文本、数据和 bss 段、堆和用户堆栈的相同(但单独)副本。那么这是否意味着父母的相同大小的内存地址也被分配给孩子,并且孩子的内存内容与其父母完全相同?如果是这样,假设我们创建了大量的子进程,堆栈是不是很容易溢出?
您可以看到以红色突出显示的用户堆栈是父堆栈。那么如果父程序使用fork(),当它执行fork()函数时,子进程的栈是如何分配的呢?是当前栈旁边的子栈
【问题讨论】:
-
对于 Q1:考虑一个父进程派生一个子进程。当子进程终止时,操作系统会继续存储子进程的返回状态信息,以便父进程调用waitpid时可以得到返回状态。只有父进程调用waitpid,操作系统才能获取子进程。
-
@MFisherKDX 那么获取子进程的目的仅仅是为了获取子进程的返回状态吗?
-
在这里阅读:Zombie Process
标签: c linux process operating-system