gpt4 book ai didi

linux - fork 时其他线程分配的内存会发生什么

转载 作者:太空宇宙 更新时间:2023-11-04 12:57:30 36 4
gpt4 key购买 nike

我有一个庞大的应用程序,需要在某个时候自行 fork 。该应用程序是多线程的,分配了大约 200MB 的内存。我现在想做的是启动一个新线程并在该线程内部 fork ,以确保进程分配的数据不会重复。据我所知,只有调用 fork 的线程会被复制,但是分配的内存会怎样?那还会存在吗?这样做的目的是使用其他启动参数重新启动应用程序,当它 fork 时,它将使用我的新参数调用 main ,从而有望获得同一程序的新进程。现在在你问之前:我不能保证那个进程的二进制文件仍然在我启动进程时的同一个地方,否则我可以只是 forkexec whats在 /proc/self/exe 中。

最佳答案

线程是进程所在的大资源包中的执行单元。进程是您可以从进程中的任何线程访问的全部内容:所有线程、所有文件描述符、所有其他资源。所以内存绝对不绑定(bind)到线程,从线程 fork 也没有任何用处。 一切仍然需要复制,因为 fork 点是创建一个新进程。

也就是说,Linux 有一些技巧可以让它更快。复制 2 GB 的 RAM 既不快速也不高效。所以当你 fork 时,Linux 实际上给新进程 相同的 内存(一开始),但它使用虚拟内存系统将其标记为写时复制:只要一个进程需要写入该内存,内核拦截它并分配不同的内存,以便其他进程不受影响。

关于linux - fork 时其他线程分配的内存会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35321034/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com