Linux 在堆上的类中分叉

2023-12-27

当我遇到以下情况时会发生什么:

A 类:保留动态分配的对象 B。它将创造和摧毁这些。

B类:有一个由A调用的execute函数。execute将fork(),子进程将使用execvp来运行另一个进程。但是,可以设置一个标志,以便父进程不会等待子进程(允许其在后台运行)。

我的问题是,在这种情况下 fork 在做什么?我知道孩子有父母过程的完整副本,但我有点困惑。那么这是否意味着子进程有自己的对象 A 并持有 B 呢?如果 B 没有等待,但 A 删除了 B,会发生什么?

这是一些示例代码。请注意,它是我实际所做的简化。

class B;
class A
{
    public:
    void addAction( const std::string &name )
    {
        _bq.push( new B( name ) );
    }

    void doActions( bool wait = true )
    {
        while ( !_bq.empty() )
        {
            B* b = _bq.front();
            b->execute( wait );
            _bq.pop();
            delete b;
        }
    }

    ~A() { //omitted, but just deletes everything in queue }

    private:
    std::queue<B*> _bq;
};

class B
{
    public:
    B( const std::string &name )
    {
        args.push_back( name.c_str() );
        args.push_back( NULL );
    }
    void execute( bool waitForChild )
    {
        pid_t pid = fork();
        if ( pid != 0 )
        {
            if (waitForChild)
            {
                int status;
                wait( &status );
                // check status...
             }
        }
        else
        {
            execvp( args[0], const_cast<char**>( &args[0] ) );
            // problem
            exit( 100 );
        }
    }
    private:
    std::vector<char*> args;
};

子进程与父进程完全分离,并且具有父进程变量的完整副本。当子进程执行时(调用execve()或其亲属之一),不执行任何 C++ 析构函数。但是,这对父进程没有任何影响。

因此,孩子和进程之间不存在干扰。父母是否等待孩子并不重要。一旦fork()返回(成功)到父进程,子进程独立运行,父进程对分配的变量所做的任何操作都不会影响子进程。

如果您真的很努力并通过放置将共享内存和变量分配到共享内存中new如果孩子在调用之前清理共享内存中的变量execvp(),或者其他一些类似牵强但实际上并非不可能的情况,那么孩子和父母并不是完全独立的。但是,如果您正在做如此复杂的事情,您可能也不会问这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 在堆上的类中分叉 的相关文章

  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 启动时出现 OData v4 错误:找不到段“Whatever”的资源

    我正在构建新的 v4 服务 一切进展顺利 直到我为新模型 实体添加了新控制器 并在启动站点进行测试运行时收到此错误 控制器似乎编码正确 就像其他控制器一样 控制器 CustomersOData 中的操作 GetFeed 上的路径模板 Cus
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 如何将自定义 JSON 文件添加到 IConfiguration 中?

    我正在使用 asp net Autofac 我正在尝试加载自定义 JSON 配置文件 并基于该文件创建 实例化 IConfiguration 实例 或者至少将我的文件包含到默认情况下构建的 IConfiguration asp net 中
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • 如何在 C# 中调整图像大小同时保持高质量?

    我从这里找到了一篇关于图像处理的文章 http www switchonthecode com tutorials csharp tutorial image editing saving cropping and resizing htt
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • 如何将 Roslyn 语义模型返回的类型符号名称与 Mono.Cecil 返回的类型符号名称相匹配?

    我有以下代码 var paramDeclType m semanticModel GetTypeInfo paramDecl Type Type Where paramDeclType ToString returns System Col
  • 在客户端系统中安装后桌面应用程序无法打开

    我目前正在使用 Visual Studio 2017 和 4 6 1 net 框架 我为桌面应用程序创建了安装文件 安装程序在我的系统中完美安装并运行 问题是安装程序在其他计算机上成功安装 但应用程序无法打开 edit 在客户端系统中下载了

随机推荐

  • 在sqlite数据库android中插入日期时间

    如何使用 contentvalues 而不使用原始查询在我的 sqlite 数据库中插入日期时间数据 datetime now 插入自身 文本 而不是时间 我可以在当前时间上添加额外的时间吗 就像 当我按下按钮 1 HOUR 时 它会在 s
  • 了解 Java 易失性可见性

    我正在阅读有关 Java 的内容volatile关键字并对它的 可见性 感到困惑 volatile 关键字的典型用法是 volatile boolean ready false int value 0 void publisher valu
  • 如何从类内实例化的对象访问私有变量

    我正在尝试更改对象内部类的私有变量 该变量是在该类内部初始化的 我的意图可以从下面的简单例子中看出 这Increment打电话自obj应增加BaseClass stuff template
  • 在 VS2017 中找不到 ADO.net 实体数据模型模板

    我试图在 Visual Studio 2017 中创建 ASP NET MVC Web 应用程序 我需要采用 EF 数据库优先的方法来完成这项工作 不幸的是 我在 数据 模板文件夹中找不到 ADO NET 实体数据模型模板 我尝试过以下建议
  • Android 5.0 上窗口动画与导航栏重叠

    我正在实施材料设计底板 http www google com design spec components bottom sheets html我的应用程序中的设计模式使用自定义子类Dialog 该对话框被吸引到屏幕底部并使用 y 平移窗
  • 在 Hive 表中插入覆盖分区 - 值重复

    我创建了一个 Hive 表不分区表并使用选择查询将数据插入已分区蜂巢表 参考网站 https blog safaribooksonline com 2012 12 03 tip partitioning data in hive 通过上面的
  • 如何在一切都清楚的情况下重新启动 googlecolab 运行时?

    我在 colab 上安装了许多库和许多设置 现在我想清除我的 colab 帐户上的所有设置 文件 库和所有内容 有可能吗 To drop your current backend and start fresh with a new one
  • 角度材质对话框在导航后未关闭

    我正在开发一个显示数据表中实体概述的应用程序 每个实体都有链接实体 这些实体在列中显示为 xxx 链接实体 当用户单击该列的值时 将打开一个材料对话框 显示链接实体的列表 这些都是到其他实体的链接 单击这些链接之一后 会显示实体的正确页面
  • 如何提高 Google Big Query 每日查询配额

    我们正在运行批处理 并达到每日查询配额 20 000 有办法提高限额吗 thanks 我们通常很乐意提高每天的查询限制 目前为 40k 天 一般来说 它是为了防止滥用场景 使用 BigQuery 作为计算器的人 例如SELECT 17 32
  • 我可以在 1 个应用程序中拥有同一 UserControl 的多个实例吗?

    我正在创建一个文本编辑器类型应用程序 我可以通过选项卡打开多个编辑器 在我的第一次尝试中 我使用了简单的TextBoxes 编辑文本 一切正常 然后我创建了一个UserControl封装文本框 按钮来执行文本操作 例如 粗体 斜体等 我发现
  • 如何添加带有嵌套资源的删除路线 Rails 4

    Todo 有很多项目 我正在尝试添加一个链接以从待办事项列表中删除项目 我尝试过通过 id 在待办事项列表下查找项目的变体 但我无法弄清楚 这是基于我所做的更改的最新错误 我不知道如何解决这个问题 错误信息 No route matches
  • 在 R 函数中调用 SQL 函数

    我想知道是否可以致电SQL内的功能R功能 举例来说 我有这个虚拟数据并且SQL函数写在Postgres 9 3 CREATE TABLE tbl id VARCHAR 2 PRIMARY KEY name TEXT year born NU
  • ServiceStack - 是否有最新的、完整的文档?

    我正在尝试了解 ServiceStack 虽然它声称它拥有非常好的文档 但到目前为止情况似乎并非如此 是否有文档实际说明要使用哪些接口 基类以及它们的作用 只是 有一堆问题 并且能找到很少的答案 新的API设计 https github c
  • 如何安装气体预处理器?

    抱歉这个愚蠢的问题 我想安装气体预处理器 https github com yuvi gas preprocessor 但我只是不知道如何做到这一点 我与 pl 文件有什么关系 如何安装脚本 提前致谢 亚历克斯 好吧 我遇到了同样的问题 找
  • 如何在 jupyter 笔记本中添加/编辑代码片段?

    我尝试按照扩展的自述文件中给出的说明进行操作 我使用 Windows 并打开我的笔记本 我使用存储在目录中的 jupyter notebook exe Anaconda3 脚本 在 Anaconda3 目录中 我转到子目录 Anaconda
  • OLAP 中的锁定问题是什么?

    在一家当地金融机构 我因为向他们表达了我的观点 他们的程序员的痴迷 而被他们的程序员斥责 b 他们的 MS SQL Server 2005 OLAP SSAS 数据库中的锁定问题对我来说没有多大意义 OLTP 数据库是 SQL Server
  • 在 jQuery UI 日期选择器上禁用一周中的特定日期[重复]

    这个问题在这里已经有答案了 可能的重复 jQuery UI 日期选择器可以禁用周六和周日 以及节假日 吗 https stackoverflow com questions 501943 can the jquery ui datepick
  • VB.Net 列表.查找。将值传递给谓词

    使用带有自定义谓词的 List Find 时遇到一些问题 我有一个函数可以做到这一点 private function test Dim test As Integer keys Find AddressOf FindByOldKeyAnd
  • 在 Angular 2 应用程序上使用 Google Adsense 广告

    有没有办法在 Angular 2 应用程序上使用 Google Adsense 广告 我见过这个Angular 2 组件中的 Google AdSense 广告 https stackoverflow com questions 37580
  • Linux 在堆上的类中分叉

    当我遇到以下情况时会发生什么 A 类 保留动态分配的对象 B 它将创造和摧毁这些 B类 有一个由A调用的execute函数 execute将fork 子进程将使用execvp来运行另一个进程 但是 可以设置一个标志 以便父进程不会等待子进程