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

c++ - 在 boost 进程异步子进程中 run() 之后是否需要 wait()?

Boost Process在异步模式下使用来获取 shell 命令的stdoutstderr返回代码。在下面的代码片段中,是否c.wait()需要调用?根据Boost Process 1.68 文档,它不是必需的,根据boost process 1.65.1.

现在,我正在使用Boost 1.68,当我删除对 的调用时c.wait(),我得到一个returnStatusof而不是我添加调用时得到127的期望的。通话有什么不同?0c.wait()c.wait()

0 投票
2 回答
1993 浏览

c++ - 在异步模式下使用 boost 进程运行进程并超时

在下面的代码中,我试图实现一个运行 shell 命令并获取stdio,stderr并返回代码的程序。我正在按照此处boost process建议的async模式使用它。

现在,上面的代码只有在deadline_timer过期后才返回。我想要的是,如果子进程在计时器到期之前完成,或者它(连同它派生的所有子进程)应该终止,它应该退出。请指出我代码中的错误。

0 投票
1 回答
361 浏览

c++ - 阻塞信号导致升压过程不起作用

在下面的代码中,该类Process可以boost process在异步模式下运行一个进程,如果超时可以终止它。现在为了关闭它,我阻塞了所有线程中的所有信号,并创建了一个特定的线程 signal_thread 来处理信号。这样做时,程序停止工作。我猜这可能是因为父进程无法再收到信号SIGCHLD并且知道子进程已经执行完毕。

请建议我如何使用信号处理线程关闭程序以及使程序正常工作。

0 投票
0 回答
335 浏览

c++ - boost::process 子进程在读取所有标准输出之前终止

我想使用 boost-process 从命令中读取标准输出:

这几乎与 boost-process教程相同。

对于测试,“命令”只是转储一个包含 10000 行的文本文件。

问题是我的代码没有读取命令的所有输出(对于测试用例,它只读取大约 9700 行)。

我究竟做错了什么?

似乎子进程在读取所有标准输出之前就终止了。

0 投票
0 回答
111 浏览

c++ - Solaris 10 上的 Boost Process 在异步模式下失败

我正在使用boost processinasync模式从C++应用程序运行 shell 命令。以下代码在LinuxCentOS 7在我的情况下)运行良好,但在Solaris 10. On Solaris 10,返回码是127andstdout并且stderr是空的。

CentOS 7 上的输出

Solaris 10 上的输出

这是在truss.

请帮我弄清楚发生了什么。

0 投票
2 回答
648 浏览

c++ - 如何使用 boost::async_system?

我对 boost 以及使用库的多线程和启动应用程序都很陌生。对于我想要的功能,同事推荐我使用 boost::process 库。

但是这部分 boost 的文档是相当不足的,所以我无法通过文档确定哪个函数最适合我的任务。因此,我开始在那里尝试几个功能,但 non 具有所有所需的属性。

但是有一个我不知道如何正确使用。我什至无法编译它,更不用说运行它了。函数是 boost::process::async_system。我在互联网上的任何地方都找不到有关如何使用此功能以及各个组件的含义和作用的分步指南。

有人可以向我详细解释函数的各个参数和模板参数吗?或者提供详细手册的链接?

0 投票
2 回答
1587 浏览

c++ - 使用 boost 创建具有自定义环境的子进程

文档提升没有提供任何使用process::child(...).
给出了一个示例,process::system(...)但该函数system的操作可能较少(例如管道或 waitpid),因此如果可能,我希望有一个完整的示例process::child

0 投票
1 回答
2527 浏览

c++ - Connect to boost named pipe

I have this code:

Now, I execute echo 42 > \\.\pipe\SamplePipe in the cmd and expect an asynchronous read to the buffer to occur. But instead I get the following error: "All pipe instances are busy." Can somebody please explain to me why this is happening and how i can fix it?

0 投票
1 回答
87 浏览

c++ - 将功能从控制台应用程序移动到共享库项目似乎会带来不相关的编译错误

我的解决方案有几个 c++ 控制台应用程序。该解决方案还有一个作为静态库 (.lib) 构建的项目。该库在所有控制台应用程序中用于任何常见功能。所有这些项目还使用各种 boost 库。

最近需要在其他应用程序中重用来自控制台应用程序的函数。因此,我决定将该函数从控制台应用程序移出到该静态库。但是,这样做会带来以下编译错误。

此函数使用 boost::process 库,它在控制台应用程序中运行良好。但是,当我将相同的函数移动到共享库项目中时,我开始看到此错误。没有其他警告,也没有指向我的任何应用程序代码。知道这个错误背后的原因是什么吗?

0 投票
2 回答
105 浏览

c++ - 如何避免参数数量取决于条件的调用分支?

我正在将一些代码从 using 转换CreateProcess为使用。我需要CreateProcessboost::process::child. 问题是他们有不兼容的方式让我说“我想使用默认值”。以前的单行命令变成了十六条if语句。

我目前使用的功能是这样的(简化的):

每个参数都有一个值,您可以使用它来指示您想要默认值。我将在这个例子中使用 0:

这是一种常见的设计。你知道我在说什么。我是否想使用默认值可以通过一个简单的条件来决定,例如(... ? 0 : int_param). 这允许每次CreateProcess调用都是一行代码。

在我以前调用的地方CreateProcess,我现在想创建一个child类。像这样工作的构造函数child

而不是传递一个特定的值来使用默认值,我必须传递 nothing

到目前为止,我唯一的“解决方案”是使用if分支。

这个例子只有两个可能的参数,它变成了四个分支。实数child有四个可能的参数,所以每个实例都有十六个分支。

我想要的是某种方式来构建调用以避免这种分支。特定于的解决方案boost::process也很好。

仅供参考,最后两个参数child可能是也可能不是同一类型。