gpt4 book ai didi

c - 具有共享内存的进程异常终止的行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:31:36 24 4
gpt4 key购买 nike

我正在做一个项目。许多进程共享内存意味着它们在内核中使用相同的物理内存地址。

只是一个例子:-在运行 bash 命令 shell 的系统中可能有多个进程。与其在每个进程的虚拟地址空间中有多个 bash 副本,不如在物理内存中只有一个副本,并且所有运行 bash 的进程共享它。

现在,我维护引用计数以了解有多少进程正在使用该资源,并在正常终止时引用计数变为零时释放资源。但是异常终止会发生什么??

到目前为止,据我所知,如果一个进程异常终止,那么 linux 会释放它的资源并清除它的内存。那么,它还会清除其他进程共享的物理内存吗?如果不是,那么我应该如何知道哪个进程异常终止(数百个进程正在运行并且每秒都会创建和终止新进程)因为我将不得不减少引用计数否则引用计数永远不会变为零并且与之关联的资源永远不会免费。

最佳答案

内存用于数据或代码。就控制而言,这是两种不同的类型或内存区域。您似乎在问题中将这些类型混合在一起。

进程可以共享数据内存或者可以使用共享库。这些都是以不同的方式完成的。

启动外部进程时,您无法控制加载进程代码的内存。这意味着您使用 bash 的示例没有意义。

如果您使用系统 API 来分配和操作共享(数据)内存,那么操作系统会负责资源的分配和释放,包括在异常终止的进程后进行清理。您无需为自己的引用计数而烦恼。

如果你有一个“每秒都有新进程被创建和终止”的系统,那么你不应该担心异常终止的进程和资源分配/解除分配,因为整个情况已经异常.

您可能想重新考虑您的设计或提出不同的问题。

关于c - 具有共享内存的进程异常终止的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26417177/

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