问题标签 [boost-process]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4307 浏览

c++ - 使用 BOOST 进程在单独的线程中读取子进程标准输出

我有一个主程序,它使用 boost 进程库来生成一个打印的子进程

每 5 秒在其标准输出上。

我想在主进程中读取/监视子进程的标准输出,当它可用时,以及在主程序中执行其他操作。

我已经尝试了boost asynchronous IOhttp://www.boost.org/doc/libs/1_66_0/doc/html/boost_process/tutorial.html)的示例,但所有这些似乎都会阻塞主程序,直到子进程退出。

我们是否需要在单独的线程中读取孩子的标准输出?有人可以提供一个例子,主程序可以同时做其他事情而不是阻止来自孩子的标准输出吗?

0 投票
1 回答
285 浏览

boost - 如何通过异步运行 boost 子进程来测试实例计数器?

我尝试将boost:: childprocess 与 async_pipe 一起使用,如下面的代码示例所示,同时期望由于有一个等待方法,运行调用不会等待被调用的可执行文件完成,然后继续执行我所在的行调用wait()。我的目标是多次启动同一个可执行文件,以便在 GTest 中测试一个实例计数方法(基于 boost 托管共享内存段实现)。 但是在这里我需要调用io_service::run(),而不是像现在这样等待被调用的可执行文件完成。有人可以告诉我我在哪里使用错了吗?或者,如果这是对我的功能进行单元测试的错误方法?一段时间以来,我一直在努力寻找解决方案! 这是我如何调用可执行文件的一个实例的示例:

}

0 投票
2 回答
935 浏览

c++ - 为什么 _popen 在这里可以工作,而 boost::process 却不行?

我在windows上使用_popen有以下工作代码,

但是这样做的问题是 cmd 窗口不断弹出,并且没有办法阻止它(Link)所以,我在 boost::process 中编写了等效代码

所以,我的问题是 - 这两个代码片段是否等效?如果是这样,为什么第二个不起作用?

0 投票
1 回答
1098 浏览

c++ - 从 boost::process 到 boost::child 的信号传播

boost::process在 Linux 的主应用程序中使用 v.1.65.1 来创建少量boost::process::child对象并管理通过管道交换的boost::process::std_in数据boost::process::std_out

当我的主应用程序收到控制台发送的 CTRL-C 时,我看到子应用程序也收到了 CTRL-C 信号。

为了终止我的孩子,我更愿意通过管道发送一个明确的命令,但是当我这样做时,信号已经被传播了。实际上,有些孩子看到了命令,而其他孩子却没有看到信号。

  1. 这种信号传播是正常行为吗?
  2. 我可以做些什么来防止这种情况发生,以便我可以通过管道发出命令而不受干扰?
0 投票
1 回答
1425 浏览

boost - Boost进程连续读取输出

我正在尝试从不同进程读取输出/日志并将它们显示在 GUI 中。这些过程将运行很长时间并产生巨大的输出。我计划流式传输这些流程的输出并根据我的需要显示它们。一直允许我的 gui 应用程序接受用户输入并执行其他操作。

我在这里所做的是,从主线程为每个进程启动两个线程。一个用于启动进程,另一个用于读取进程的输出。

这是我迄今为止提出的解决方案。

到目前为止,该程序正在按预期工作。但我不确定这是否是正确的解决方案。请让我知道是否有任何替代/更好/正确的解决方案

谢谢,苏里亚

0 投票
1 回答
100 浏览

c++ - boost::process 在 Cygwin 中不起作用

尝试在 Cygwin 环境中编译以下代码:

并得到以下错误:

你能建议如何解决它吗?

我正在使用 Boost 1.66。

0 投票
1 回答
604 浏览

c++ - 升压过程中的管道缓冲区大小

boost::process用来异步读取 Windows 中控制台应用程序的输出。我注意到每次大约 4k 数据后触发读取事件。

如果我将缓冲区“buf”设置为一个较小的值,则不会发生任何变化:仅在传输 4k 数据后才会多次触发事件。

据我了解,这可能是 Windows 中使用的一种安全机制,可以避免从管道读取时出现死锁。

有什么办法boost::process可以改变 PIPE 用来传输数据的缓冲区的大小?

0 投票
0 回答
612 浏览

zombie-process - 为什么 boost::process::spawn 会留下僵尸?

我正在advzip从代码中调用外部实用程序 ( ) 以对写入的数据运行异步重新压缩。我曾经boost::process::spawn这样做:

但是,这些子流程在完成工作之后仍处于僵尸状态,根据boost::process::spawn文档,这是不应该发生的。难道我做错了什么?

我正在使用 boost 1.65,在 Ubuntu 18.04 下运行。

htop 截图

0 投票
1 回答
816 浏览

boost - 使用 boost 进程库防止子进程继承父进程打开的 TCP 端口

我有一个 C++ 应用程序正在侦听特定的 TCP 端口。该应用程序还使用 Boost 进程库中的 Boost 子类启动子进程。一旦子进程启动,netstat 命令的输出就会显示 TCP 端口也与创建的子进程相关联。有没有一种方法可以防止孩子在使用 boost 进程库时继承父母的端口?孩子被创建为:

bp::child* proc = new bp::child("a.out", bp::std_out > stdout, bp::std_err > stderr); 我正在使用Linux平台。谢谢。

0 投票
1 回答
1793 浏览

c++ - 使用 boost 进程获取 shell 命令的标准输出

我正在尝试在 C++ 中实现一个运行 shell 命令并返回退出代码的函数,stdoutstderr.正在使用Boost process library

在 boost 网站的上述示例中,在 while 循环中检查了条件 c.running()。如果进程在到达 while 循环之前完成执行怎么办?在那种情况下,我将无法将子进程的标准输出存储到数据中。Boost 的文档还提到了以下内容

[警告] 警告 如果在 nm 退出后尝试读取,管道将导致死锁

因此,似乎 c.running() 的检查应该在 while 循环中。

如何在程序到达 while 循环之前从完成运行的进程中获取标准输出(和标准错误)?