问题标签 [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 回答
768 浏览

c++ - 使用 Boost.Process 进行异步调用 std::future.get() 后程序挂起

我正在创建一个异步执行多个可执行文件的程序。我的问题是,当我从std::future调用get()函数时,我的程序挂断而没有错误。

我正在使用 Boost.Process 来管理进程以及其他地方的 wxWidgets。

我的程序创建了一个指向包含 std::future 的新 BProcess 的指针。计时器函数稍后每隔几毫秒检查一次,以查看每个进程是否已完成。

编辑:这是来自 gdb 的“where”的输出:我想弄清楚发生了什么。这对任何人都有意义吗?

任何帮助,将不胜感激。如果我没有显示足够的代码,请告诉我。

0 投票
1 回答
1546 浏览

c++ - async_pipe 子进程上的 async_read 不提供数据

我有以下代码,它是从我试图在连接到子进程的 async_pipe 上执行 async_read 的真实代码中简化而来的。在子进程中,我称之为“ls”。作为一个测试,我希望我的异步读取能够得到结果。它返回以下内容

为什么会发生这种情况我无法弄清楚?理想情况下,我想替换“ls”。有一个长时间运行的过程,我可以用 async_read 逐行读取。

0 投票
2 回答
1448 浏览

c++ - boost::process 如何知道进程何时“优雅地”退出?

在等待 aboost::process::child时,你怎么知道它是否“优雅地”退出?

假设我创建了一个进程:

myprg.exe 在哪里:

注意:这是一个没有意义的 MCVE,我同意如果成功,main 应该返回 0。

我看到如果有人在等待时终止进程(child.terminate例如使用 Windows 进程管理器),child.exit_code()将返回 1。

那么,到底什么时候child.exit_code()是1,我怎么知道这是进程的主入口函数返回的值还是进程被杀死了呢?

是否保证 1 意味着进程被杀死?那么程序不应该返回 1 并保留这个退出代码来识别它被杀死并且没有干净退出的具体情况吗?

如果没有,boost::processAPI 是否提供了一些信息来了解进程是否干净地结束或被杀死?

0 投票
1 回答
3112 浏览

c++ - 将向量或参数传递给 boost::process (boost::fusion)

我正在尝试boost::process从字符串参数向量创建一个:

这显然有效,但我收到以下警告:

警告 C4503:'boost::fusion::detail::for_each_linear':超出修饰名称长度,名称被截断

如果一一传递参数,它就会消失bp::child c(exe, "param1", "param2", std_out > out);

在这种情况下调用child构造函数的正确方法是什么?

0 投票
2 回答
1749 浏览

c++ - 提升进程 running() 和 exit_code() 线程安全

每当发生这种情况时,我正在使用boost::process::childboost::process::async_pipe启动一个应用程序并异步(通过boost::asio)读取应用程序在屏幕上输出的所有内容。

我还想通过使用child::running()方法检查应用程序是否还活着;如果没有运行,我想使用child::exit_code.

这非常有用,特别是因为它是一种通知应用程序崩溃或意外退出的方法(我找不到更好的方法);当应用程序退出时,使用boost::system::error_codeset 调用回调。

你知道我是否可以在调用的回调中使用这两种方法async_pipe::async_read_some吗?

一般来说,更简单的问题是线程是否安全(在 Windows 和 Linux 中)child::running()child::exit_code()

0 投票
1 回答
73 浏览

c++ - boost::process::std_out 没有返回,因为它试图打开一个先进先出

当我运行此代码时,该boost::process::std_out > "myfifo"行没有返回,因为它正在等待open调用返回,而不是因为“myfifo”是一个fifo。这是一个错误吗?

0 投票
1 回答
3342 浏览

c++ - 如何使用 boost.process 重定向标准输入和标准输出

我正在尝试重定向子进程的标准输入和标准输出。想用缓冲区中的二进制数据填充进程的标准输入并读取它,(但现在我只需要知道有多少写入标准输出)

写看起来是成功的,但程序卡在读循环中,进程(子进程和父进程)在此期间保持空闲

0 投票
1 回答
1406 浏览

c++ - 使用 boost.process 同时读取和写入孩子的 stdio

我正在尝试使用 boost.process 使用类似这样的东西来写入和读取孩子的 stdio:

所有读写操作都被通知为成功,但 totalWrite 的值完全不正确 fe 报告 29356032,实际值应该在 50000000 左右
我注意到程序中途终止,
在 readService.run() 冻结孩子后使用 process.wait(),
使用 atomic int

现在产生相同的行为我实际上只需要知道实际写入了多少数据,这就是我使用相同缓冲区的原因

0 投票
2 回答
378 浏览

c++ - Boost::process 输出空行

我正在开发一个应用程序,我需要根据用户输入启动和停止各种不同的可执行文件。我希望我的“核心”程序在这些可执行文件运行时正常运行,即不要等待它们的终止,这在理论上可能是无限的。除此之外,我还需要能够接收 std_out 并将 std_in 发送到这些可执行文件。

目前我有一个设置,我有一个流程管理器类:

补丁过程在哪里:

我可以在哪里使用该功能启动/添加新进程

我的打印尝试:

此代码成功启动了该过程,但是 readAllIn 给了我一个空白输出。我有一种感觉,我做错了什么std::shared_ptr<boost::process::ipstream> procOutStream;。我这样做的理由是我正在使用push_back我的 processList(结构向量),所以它应该是可复制的。我可以在不使用 patchProcess 结构和这些共享指针的情况下获得测试 exec 的输出,但这会使管理变得困难/混乱。我还可以确认,如果我尝试使用以下内容读取 addNew 函数中的输出:

我得到了我的可执行文件的输出。那么这是否暗示复制构造函数出了问题?

0 投票
1 回答
733 浏览

boost - 如何在打印后立即检索程序输出?

我有一个 boost::process::child。有很多关于如何在单个向量中获取其所有标准输出或标准错误的示例,但在这种方法中,您可以一次捕获所有数据。但是如何在子进程中打印后立即检索行/字符?