子进程内存分配和收割子进程的目的

阿姆贾德

我是进程的初学者,仍在努力理解为它们获取子进程和内存分配的目的,所以我的问题是:

一季度。为什么Linux没有自动收割子进程的机制,我的意思是所有的子进程在完成后就像垃圾回收一样被终止和删除,这样用户就不需要waitpid手动收割子进程了?

Q2。我的教科书说,当用户使用 fork() 创建新的子进程时,子进程会获得父进程的文本、数据和 bss 段、堆和用户堆栈的相同(但独立)副本。那么这是否意味着父母的相同大小的内存地址也分配给孩子并且孩子的内存内容与其父母完全相同?如果是这样,假设我们创建了大量的子进程,是不是堆栈很容易溢出?

Q3。假设下图是父进程在此处输入图片说明

您可以看到以红色突出显示的用户堆栈是父级的堆栈。那么如果父程序使用 fork() 并且当它执行 fork() 函数时,子进程的堆栈如何分配?是当前堆栈旁边的子堆栈

大卫·施瓦茨

一季度。为什么Linux没有自动收割子进程的机制,我的意思是所有的子进程在完成后就像垃圾回收一样被终止和删除,这样用户就不需要使用waitpid来手动收割子进程了?

确实如此。只需将 SIGCHLD 设置为忽略,您的孩子就会为您收割。

Q2。我的教科书说,当用户使用 fork() 创建新的子进程时,子进程会获得父进程的文本、数据和 bss 段、堆和用户堆栈的相同(但独立)副本。那么这是否意味着父母的相同大小的内存地址也分配给孩子并且孩子的内存内容与其父母完全相同?

这是一个实现细节。大多数现代系统只是在两个进程之间共享内存。

如果是这样,假设我们创建了大量的子进程,是不是堆栈很容易溢出?

不。当您在特定进程的内存视图中用完地址空间时,堆栈会溢出。由于每个fork进程都会创建一个新进程,因此您不会在任何特定进程中耗尽地址空间。

Q3。假设下图是父进程在此处输入图像描述...您可以看到以红色突出显示的用户堆栈是父进程的堆栈。那么如果父程序使用 fork() 并且当它执行 fork() 函数时,子进程的堆栈如何分配?子堆栈是否在当前堆栈旁边?

子进程的堆栈在另一个进程中。因此,如果这是父进程段的地址空间,则子进程的堆栈根本不在其中。子进程从父进程的地址空间的副本开始——通常共享实际的内存页面,至少在任一进程尝试修改它们(取消共享它们)之前。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

检查每个进程和子进程的内存

来自分类Dev

设置 JNI 和子进程内存限制

来自分类Dev

内存分配和进程内存使用

来自分类Dev

内存分配和进程内存使用

来自分类Dev

超时终止进程和任何子进程

来自分类Dev

如何同时杀死进程和子进程?

来自分类Dev

Fork()新进程并写入子进程和父进程的文件

来自分类Dev

僵尸进程(杀死子进程和父进程)

来自分类Dev

Unicode和子进程.Popen

来自分类Dev

python子进程和mysqldump

来自分类Dev

杀死bash和子进程

来自分类Dev

叉和子/父进程

来自分类Dev

python子进程和shlex

来自分类Dev

如何限制进程及其子进程的总资源(内存)

来自分类Dev

子进程内存释放问题与execvp

来自分类Dev

pcntl_fork子进程内存

来自分类Dev

限制进程的内存分配

来自分类Dev

对PHP脚本的多个jQuery.load()调用导致“无法分配内存:无法创建子进程”错误

来自分类Dev

对PHP脚本的多个jQuery.load()调用导致“无法分配内存:无法创建子进程”错误

来自分类Dev

用子进程替换进程

来自分类Dev

进程及其子进程列表

来自分类Dev

python子进程-分离进程

来自分类Dev

用子进程替换进程

来自分类Dev

确定子进程的子进程?

来自分类Dev

自动终止进程和多处理池的子进程

来自分类Dev

如何使用windbg调试子进程和父进程?

来自分类Dev

节点Kue和子进程-从生成的进程中获取错误

来自分类Dev

杀死进程本身和所有子进程的最佳方法

来自分类Dev

Linux中的Python:使用Shell杀死进程和子进程