问题标签 [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 投票
0 回答
59 浏览

c++ - 从 Windows 上的子进程读取宽字符输出

我的应用程序必须在 Windows 上运行并使用 unicode 字符集。当我尝试使用以下命令读取输出时,我只会得到打乱的输出,但是用 char_t 等效项替换所有类型都有效,除非存在当前代码页不支持的字符。有谁知道为什么 wchar_t 变体似乎根本不起作用以及如何修复它?

0 投票
0 回答
30 浏览

pipe - 如何在 C++ 中使用 LC0 管道消息

我正在实现一个 C++ 程序,它将与一个与 UCI 兼容的国际象棋引擎进行通信。我的程序将打开国际象棋引擎并将其作为子进程运行,然后使用流和管道与其通信。我需要这样做,以便我可以获得引擎生成的所有合法动作。这样我就可以将它与我自己的引擎的移动生成器进行比较,看看它是否准确。

我以前写过与子进程通信的程序,它们工作得很好。我使用了 boost-process 并将 std_in 和 std_out 与 ipstream 和 opstream 一起路由。但是对于 LC0 国际象棋引擎,每当我尝试读取它的 std_out 数据时,我的程序都会挂起并且不会在启动时打印 LC0 输出的内容。对于其他命令行应用程序,我的代码工作得很好。它与 LC0 一起工作的唯一时间是当我不重新路由引擎 std_in 和 std_out 时,或者当我将 --help 选项传递给 lc0.exe 时,在这种情况下,程序会打印帮助消息并关闭。我想知道当 lc0.exe 的 std_out 被重新路由到管道时,它的行为是否不同。

这是我的代码的简化示例。

我的代码应该是什么样子,以便它将 std_out 数据从 LC0 读取到字符串中而不会挂起。

我正在编译:操作系统:Windows 10 IDE:VS2019 Boost:1.76 版

0 投票
0 回答
30 浏览

multiprocessing - 提升已从消息队列中读取的进程的进程间返回 ID

n为每个进程编号,每个进程都有一个唯一的 ID。我正在使用消息队列将任务分配给这些进程。但是,当一个进程确实读取了消息队列(即执行一项任务)时,我想知道它是哪个进程,以便我可以监视它(例如,如果完成时间过长,我可以终止它)。需要返回流程和任务的简单 id,表明流程已承担任务。

我想知道我所描述的内容是否受到 boost 进程间的支持,如果支持,它是什么?即提升进程间是否提供任何简单的方法来实现这一点?

或者,我正在考虑拥有第二个消息队列,当从第一个任务队列中读取任务时,该进程会将其 ID 和任务 ID 添加到第二个消息队列中,以表明它已接受该任务。然而,拥有 2 个队列似乎有点矫枉过正。

0 投票
1 回答
103 浏览

c++ - 在 C++ 中使用 boost 与可执行文件交互

我正在尝试将我正在编写的程序与stockfishC++ 中现有的国际象棋引擎 () 连接起来。为此,我正在使用 Boost,但遇到了流程问题。engine.exe是我试图与之交互的可执行文件,但它似乎在uci. 当程序到达第二个 while 循环时,sf.running()即使它从未终止,也会返回 false。

0 投票
1 回答
201 浏览

c++ - 通过 pid 和 boost 进程杀死进程

我确实想杀死一个我有 pid 的进程,所以我的代码如下:

我注意到虽然 running() 总是返回 false (无论我采用什么 pid)并且基于源代码然后终止甚至没有被调用。

挖掘得更深一点,似乎waitpid是调用了 linux 函数。它总是返回 -1(这意味着发生了一些错误,而不是 0,这意味着:是的,该进程仍在运行)。

WIFSIGNALED 返回 1,WTERMSIG 返回 5。

我在这里做错了吗?

0 投票
1 回答
88 浏览

c++ - 进程运行时是否可以使用进程输出?

Boost.process 允许使用 Boost.asio 来执行异步读取。

据我了解,这对于在进程运行时读取输出很有用,而无需等待进程终止。

但是要访问此输出,是否需要等待进程终止,或者是否可以在进程运行时访问它,以及如何访问?

实际上,我需要在保持运行的同时访问进程输出的开头(以检查它是否按预期启动)。

为了详细说明上下文,我运行了一个我想保留到执行结束的进程:

这里的问题是生产者创建了我无法控制的输出,我只是发出输出。

0 投票
1 回答
73 浏览

c++ - Boost 进程在新窗口中打开进程 (Windows)

我正在尝试设计一个使用工作进程的程序——这只是一个用 C++ 编写的不同程序。

我像这样启动一个工作进程:

问题是,工作进程正在将信息输出到产生它们的同一命令行窗口。这使程序的输出变得混乱。理想情况下,我希望每个进程都在自己的窗口中运行。

这可以使用 boost::process 吗?我只找到了有关隐藏窗口的信息。

我正在使用 Windows 和 Visual Studio 2019。

谢谢

0 投票
1 回答
38 浏览

python - 从 C++/boost::process 实时获取 Python 输出

在 C++ 程序(在 Windows 10 下运行)中,我使用 boost::process 调用 Python 以解释简单的 Python 脚本。我想将 Python 脚本的输出实时重定向到我的 C++ 程序的控制台。

我的问题是当程序完成时我会立即获得整个 Python 脚本输出,我没有实时获得它。

这是我的 MCVE:

Python脚本(script.py):

C++ 程序(main.cpp):

该程序输出:

[12:50:34.684] - 创建子
[12:50:34.706] - 创建子
[12:50:34.708] - 调用 getline
[12:50:36.743] - 从 Python 输出:在 t=12 开始 Python 脚本: 50:34.742105
[12:50:36.745] - 来自 Python 输出:睡眠 1 秒,t=12:50:35.743111
[12:50:36.745] - 来自 Python 输出:睡眠 1 秒,t=12:50:36.743328
[ 12:50:36.746] - 从 Python 输出:在 t=12:50:36.743328
[12:50:36.747] 停止 Python 脚本 - getline 结束

正如你所看到的,我们在 Python 进程结束后得到了全部 4 个输出(第一次调用getlinefreezes 2 秒 - 而 Python 运行这两个time.sleep(1)- 然后在 3ms 内我们得到了全部 4 行)。我希望得到类似的东西:

[12:50:34.684] - 创建子
[12:50:34.706] - 创建子
[12:50:34.708] - 调用 getline
[12:50:3 4.XXX ] - 从 Python 输出:在 t 开始 Python 脚本=12:50:34.742105
[12:50:3 5.XXX ] - 来自 Python 输出:睡了 1 秒,t=12:50:35.743111
[12:50:36.XXX] - 来自 Python 输出:睡了 1 秒, t=12:50:36.743328
[12:50:36.XXX] - 从 Python 输出:在 t=12:50:36.743328
[12:50:36.XXX] 停止 Python 脚本 - getline 结束

我怀疑这个问题更多boost::process地来自 Python,但我能找到的所有例子boost::process都是以同样的方式阅读std::cout的。在 Python 打印输出时,我应该更改什么以使getline循环实时运行吗?

0 投票
0 回答
37 浏览

c++ - 柯南用过程构建提升

我正在使用柯南来管理我的依赖项;我的项目需要 Process 和 Interprocess 组件。如何使用柯南将这些组件添加到我的 Boost 构建中?我在 Windows 10 上使用 Boost 1.75 和 Conan 1.44

0 投票
1 回答
25 浏览

c++ - 如何使用 boost::process 将 SIGTERM 发送到子进程

boost/process.hpp提供了一个很好的机制来生成和管理进程。

它提供了一个 child.terminate() 方法来向孩子发送 SIGKILL。

我如何将 SIGINT 或 SIGTERM 发送到子进程?