【问题标题】:Behaviour of Abnormal termnation of process having shared memory具有共享内存的进程异常终止的行为
【发布时间】:2014-12-12 13:46:51
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c linux process linux-kernel shared-memory


    【解决方案1】:

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

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

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

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

    如果您的系统“每秒都会创建和终止新进程”,那么您可能不必担心异常终止的进程和资源分配/释放,因为整个情况已经不正常.

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

    【讨论】:

    • 我将引用计数保持为临时值。变量并在引用计数变为零时释放由多个进程共享的内存。我担心异常终止,因为在这种情况下我无法减少引用计数值,并且在我重新启动之前它永远不会为零。但是就像你说的那样,操作系统会处理资源的重新分配,然后我的问题就解决了。
    猜你喜欢
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    相关资源
    最近更新 更多