问题标签 [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.
c++ - 从 Windows 上的子进程读取宽字符输出
我的应用程序必须在 Windows 上运行并使用 unicode 字符集。当我尝试使用以下命令读取输出时,我只会得到打乱的输出,但是用 char_t 等效项替换所有类型都有效,除非存在当前代码页不支持的字符。有谁知道为什么 wchar_t 变体似乎根本不起作用以及如何修复它?
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 版
multiprocessing - 提升已从消息队列中读取的进程的进程间返回 ID
我n
为每个进程编号,每个进程都有一个唯一的 ID。我正在使用消息队列将任务分配给这些进程。但是,当一个进程确实读取了消息队列(即执行一项任务)时,我想知道它是哪个进程,以便我可以监视它(例如,如果完成时间过长,我可以终止它)。需要返回流程和任务的简单 id,表明流程已承担任务。
我想知道我所描述的内容是否受到 boost 进程间的支持,如果支持,它是什么?即提升进程间是否提供任何简单的方法来实现这一点?
或者,我正在考虑拥有第二个消息队列,当从第一个任务队列中读取任务时,该进程会将其 ID 和任务 ID 添加到第二个消息队列中,以表明它已接受该任务。然而,拥有 2 个队列似乎有点矫枉过正。
c++ - 在 C++ 中使用 boost 与可执行文件交互
我正在尝试将我正在编写的程序与stockfish
C++ 中现有的国际象棋引擎 () 连接起来。为此,我正在使用 Boost,但遇到了流程问题。engine.exe
是我试图与之交互的可执行文件,但它似乎在uci
. 当程序到达第二个 while 循环时,sf.running()
即使它从未终止,也会返回 false。
c++ - 通过 pid 和 boost 进程杀死进程
我确实想杀死一个我有 pid 的进程,所以我的代码如下:
我注意到虽然 running() 总是返回 false (无论我采用什么 pid)并且基于源代码然后终止甚至没有被调用。
挖掘得更深一点,似乎waitpid
是调用了 linux 函数。它总是返回 -1(这意味着发生了一些错误,而不是 0,这意味着:是的,该进程仍在运行)。
WIFSIGNALED 返回 1,WTERMSIG 返回 5。
我在这里做错了吗?
c++ - 进程运行时是否可以使用进程输出?
Boost.process 允许使用 Boost.asio 来执行异步读取。
据我了解,这对于在进程运行时读取输出很有用,而无需等待进程终止。
但是要访问此输出,是否需要等待进程终止,或者是否可以在进程运行时访问它,以及如何访问?
实际上,我需要在保持运行的同时访问进程输出的开头(以检查它是否按预期启动)。
为了详细说明上下文,我运行了一个我想保留到执行结束的进程:
这里的问题是生产者创建了我无法控制的输出,我只是发出输出。
c++ - Boost 进程在新窗口中打开进程 (Windows)
我正在尝试设计一个使用工作进程的程序——这只是一个用 C++ 编写的不同程序。
我像这样启动一个工作进程:
问题是,工作进程正在将信息输出到产生它们的同一命令行窗口。这使程序的输出变得混乱。理想情况下,我希望每个进程都在自己的窗口中运行。
这可以使用 boost::process 吗?我只找到了有关隐藏窗口的信息。
我正在使用 Windows 和 Visual Studio 2019。
谢谢
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 个输出(第一次调用getline
freezes 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
循环实时运行吗?
c++ - 柯南用过程构建提升
我正在使用柯南来管理我的依赖项;我的项目需要 Process 和 Interprocess 组件。如何使用柯南将这些组件添加到我的 Boost 构建中?我在 Windows 10 上使用 Boost 1.75 和 Conan 1.44
c++ - 如何使用 boost::process 将 SIGTERM 发送到子进程
boost/process.hpp提供了一个很好的机制来生成和管理进程。
它提供了一个 child.terminate() 方法来向孩子发送 SIGKILL。
我如何将 SIGINT 或 SIGTERM 发送到子进程?