使用线程执行shell命令c++

2023-11-30

是否可以通过创建线程来执行 shell 命令,即不使用 popen/system 或任何 fork-exec 变体?为什么或者为什么不?

为了提供更多上下文,我正在运行一个多线程程序,其中一个线程需要执行 shell 脚本。目前它使用 popen() 来完成此操作。然而,由于多线程程序中的分叉被认为是不好的做法,是否可以通过生成线程来实现相同的目的?


以下是关于多线程和 fork+exec 潜在问题的有用总结:https://web.archive.org/web/20170812180443/http://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them

看来如果要执行其他程序甚至shell脚本就必须使用fork+exec,这是不可避免的。只是要小心,并为像 fork 这样的“坏”事件做好线程准备。此外,您还可以在从主应用程序运行的特殊单线程可信执行帮助程序中关闭所有不必要的文件描述符(如果这是问题)。

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

使用线程执行shell命令c++ 的相关文章

  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 如何在 Android NDK 中创建新的 NativeWindow 而无需 Android 操作系统源代码?

    我想编译一个 Android OpenGL 控制台应用程序 您可以直接从控制台启动 Android x86 运行 或者从 Android x86 GUI 内的 Android 终端应用程序运行 这个帖子 如何在 Android NDK 中创
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • 构造函数中显式关键字的使用

    我试图了解 C 中显式关键字的用法 并查看了这个问题C 中的explicit关键字是什么意思 https stackoverflow com questions 121162 但是 那里列出的示例 实际上是前两个答案 对于用法并不是很清楚
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • 如何将“外部模板”与由同一类中的模板化成员使用的嵌套类一起使用?

    首先 一些背景信息 我尝试以 Herb Sutter 在他的解决方案中介绍的方式使用 Pimpl 习语 得到了 101 http herbsutter com gotw 101 这在头文件中看起来像这样 include pimpl h h
  • C# 中条件编译符号的编译时检查(参见示例)?

    在 C C 中你可以这样做 define IN USE 1 define NOT IN USE 1 define USING system 1 system 1 IN USE 进而 define MY SYSTEM IN USE if US
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 为什么我不应该对不是由 malloc() 分配的变量调用 free() ?

    我在某处读到 使用它是灾难性的free删除不是通过调用创建的对象malloc 这是真的 为什么 这是未定义的行为 永远不要尝试它 让我们看看当您尝试时会发生什么free 自动变量 堆管理器必须推断出如何获取内存块的所有权 为此 它要么必须使
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 耐用功能是否适合大量活动?

    我有一个场景 需要计算 500k 活动 都是小算盘 由于限制 我只能同时计算 30 个 想象一下下面的简单示例 FunctionName Crawl public static async Task
  • 结构体指针的动态数组

    我必须使用以下代码块来完成学校作业 严格不进行任何修改 typedef struct char firstName char lastName int id float mark pStudentRecord pStudentRecord
  • 剪贴板在 .NET 3.5 和 4 中的行为有所不同,但为什么呢?

    我们最近将一个非常大的项目从 NET Framework 3 5 升级到 4 最初一切似乎都工作正常 但现在复制粘贴操作开始出现错误 我已经成功制作了一个小型的可复制应用程序 它显示了 NET 3 5 和 4 中的不同行为 我还找到了一种解
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • 如何在Java中将日期格式化为字符串,例如“2000年12月31日”[重复]

    这个问题在这里已经有答案了 我尝试使用SimpleDateFormat类来做到这一点 但我没有找到任何选项 st 那天之后 我只能得到 2000 年 12 月 31 日 如何格式化像 2000 年 12 月 31 日 我的日期以毫秒为单位
  • Android 如何从 Material Design 文档中实现 Bottom Sheet

    如何实现底页规范 http www google com design spec components bottom sheets html Google Drive 的新更新显示了这一点 按下浮动操作按钮 gt 诚然 规格从未提及任何有关
  • 如何用SwiftyJSON解析Json中的Json?

    我从 API 返回以下 JSON 在我的数据库中 我已经以 JSON 格式存储了一个列表 因此 它为我们提供了 JSON 中的 JSON 字符串 我如何在 Swift 中将它们作为对象访问 更重要的是 如何解析 JSON 内部的 JSON
  • 使用 Mocha 和 Chai 测试使用 Web 音频 API 的库

    我正在构建一个使用网络音频 api 更具体地说是 ToneJS 的库 我尝试过使用jsdom 摩卡 jsdom没有成功 我收到这个错误 node modules tone build Tone js 3869 this input this
  • Android Studio 1.4 无法启动调试服务器

    我使用 AS 1 4 已经有一段时间了 新的本机调试功能特别有用 但是 本机调试在我的 Samsung Galaxy Note 10 1 2014 Android 4 4 上不起作用 当我尝试启动本机调试会话时 我看到以下消息 Starti
  • 在 Retrofit2 中的单个请求中使用 @FieldMap 和 @Part 会出现 java.lang.IllegalArgumentException: 仅允许一个编码注释。for 方法

    这可能看起来与之前的问题相似 但没有一个真正回答我的问题 我需要使用 Retrofit2 在一个请求中发布多个字段和多个图像 但出现此错误 java lang IllegalArgumentException Only one encodi
  • PHPUnit:在模拟之后包含类

    我很高兴编写单元测试 但是当我一起运行它们时 它们会发生冲突 我正在测试这个类 class MyClass public function sayHello return Hello world 使用这个测试 所有测试都有这样的结构 cla
  • 如果列的组合(允许重复)是唯一的,MySQL 仅插入新行

    由于 MySQL 不支持 IF EXISTS 我正在努力思考在 MySQL 中执行类似以下伪操作的语法 IF select count from table where col1 var1 AND col2 var2 AND col3 va
  • 将电话号码存储为字符串时如何防止错误输入?

    我正在创建一个可以读取 VCard 的电话簿程序 问题出在电话号码上 一般来说 在美国他们会是这样的 0771234560 但如果电话号码来自国外 就会像这样 94771234560或者可能 22 772324000 现在有 and 迹象来
  • 从文本文件修复区分大小写的搜索?

    前几天我问过一个问题在 Stack Overflow 上 询问如何从搜索文本框中搜索文本文件以匹配字符串 到目前为止 除了搜索区分大小写之外 这种方法效果很好 我想到了一种克服这个问题的方法 但它不会以我希望的方式起作用 我的想法 解决方案
  • fatfree SQL 错误处理

    如果出于某种原因 使用映射器创建条目时出现错误 我会收到错误消息 我想做一个自定义通知并像这样优雅地失败 try request gt save catch Exception e this gt utils gt errorNotify
  • 我的应用程序中的 Nougat OS 中显示的 Webview 空白页面

    我在我的应用程序中调用了 CCAvenue 支付网关集成 直到它正常工作 但是当我将设备操作系统 Marshmallow 更新到 Nougat 时 Webview 页面显示空白屏幕 logcat 中也没有找到错误日志 我还在所有其他低于 N
  • 从 XSD 生成类

    您正在 SOA 世界中进行 Web 服务的契约优先开发 编辑 XSD 文件后 从 XSD 文件自动 重新 生成 net 类的最佳方法是什么 xsd exe 将为您生成新的类 根据 Visual Studio 的设置方式 将 xsd exe
  • 启用/禁用代理应用程序在 IE 中无法正常工作

    我在这里遇到了一个非常奇怪的情况 我编写了一个应用程序 除其他外 它可以将连接的代理从打开切换到关闭 反之亦然 这是通过更改注册表中的值来完成的 public void SetUpProxy string proxy bool enable
  • 通过javascript检测ipad/iphone webview

    有没有办法用 JavaScript 检测网站是否在 iPad 的 Safari 内或应用程序 WebView 内运行 这使用了以下组合window navigator userAgent and window navigator stand
  • 数字签名 亚马逊应用商店

    我在亚马逊应用商店中读到了这样的内容 这是什么意思 我是否必须明确地做某事 或者亚马逊自己签名 我不清楚 你能告诉我吗 我可以为我的应用程序应用签名吗 所有应用程序都必须使用证书进行数字签名 应用于您的应用程序的默认签名是亚马逊提供的证书
  • 在 Web 配置中添加 serverRuntime 标记会导致 500.19 错误

    我刚刚从另一台笔记本电脑上的 TFS 下载了 asp net 项目 但无法运行它 我已经缩小了问题范围 这与我的 webconfig 设置有关 设置是
  • 如何以不区分大小写的方式从列表中删除单词?

    我有一个名为words包含可能为大写或小写或它们的某种组合的单词 然后我有另一个列表称为stopwords其中仅包含小写单词 现在我想浏览一下其中的每个单词stopwords并从中删除该单词的所有实例words以不区分大小写的方式 但我不知
  • PHP 日期“最后一个工作日”输出错误的月份

    我正在尝试获取last weekday使用下面的代码显示当前月份的数据 我期望它的行为就像所有其他运算符一样last friday of并输出本月最后一个工作日 而是输出上个月的最后一个工作日 我知道我可以通过使用来纠正这个问题modify
  • 使用线程执行shell命令c++

    是否可以通过创建线程来执行 shell 命令 即不使用 popen system 或任何 fork exec 变体 为什么或者为什么不 为了提供更多上下文 我正在运行一个多线程程序 其中一个线程需要执行 shell 脚本 目前它使用 pop