我正在尝试运行外部shell命令并使用C ++的Boost库读取其输出,但似乎该命令未运行或我无法访问输出。我以their documentation为例,写着:
#include <boost/process.hpp>
namespace bp = boost::process;
bool is_process_running(std::string p_name){
string cmd = "ps aux 2>&1";
bp::ipstream out;
std::string line;
bp::child c(cmd, bp::std_out > out);
// the while is supposed to read each line of the output
// but the execution doesn't enter here
while(c.running() && std::getline(out, line) && !line.empty())
{
if(line.find(p_name) != std::string::npos)
{
return true;
}
}
c.wait();
return false;
}
目标是验证ps aux
的每一行输出并搜索进程是否正在运行。那么,这可能是什么问题?或者,您可以为此提供一个简单的代码段吗?
答案 0 :(得分:1)
我遇到了这个问题...我只能使用boost :: asio来使流程正常工作。
这是代码,希望对您有所帮助。下面的代码处理子进程的所有三个流。
唯一的外部文件是exename_,而tstring是std :: basic_string
cursor = RaDatabase.execute_sql(r'SHOW MASTER STATUS\G')
答案 1 :(得分:1)
只需使用shell(或使用bp::system
):
#include <boost/process.hpp>
namespace bp = boost::process;
bool is_process_running(std::string p_name){
std::vector<std::string> args { "-c", "ps aux 2>&1" };
bp::ipstream out;
bp::child c(bp::search_path("sh"), args, bp::std_out > out);
for (std::string line; c.running() && std::getline(out, line);) {
if (line.find(p_name) != std::string::npos) {
return true;
}
}
c.wait();
return false;
}
#include <iostream>
int main() {
std::cout << "bogus: " << is_process_running("bogus") << "\n";
std::cout << "a.out: " << is_process_running("a.out") << "\n";
}
打印
bogus: 0
a.out: 1