子进程通信。 C ++

时间:2017-02-14 15:12:45

标签: c++ subprocess popen

我正在尝试编写一个C ++程序,它将像守护程序一样启动新进程(某些脚本,程序,命令)并从中获取一些信息(stdout)。我试图使用popen()。但主程序完成时子进程完成。我不知道,C ++是否像Python(子处理)一样易于使用。有我的代码:

#include <stdio.h>
#include <iostream>

using namespace std;

int main(int argc, char *argv[]) {
  FILE *in;
  char buff[512];
  in = popen(argv[1], "r");
  fgets(buff, sizeof(buff), in);
  cout << buff;
}

P.S:&amp;在执行命令结束时没有帮助。

3 个答案:

答案 0 :(得分:1)

fgets不会等待子流程完成,popen也不会。

您需要阅读in

的结尾
while (fgets(buff, sizeof(buff), in))
{
    cout << buff;
}

答案 1 :(得分:0)

popen函数的参考:http://man7.org/linux/man-pages/man3/popen.3.html

摘录:
“popen()函数通过创建管道,分叉并调用shell来打开一个进程。”

我认为由于fork机制,当你的(调用)进程结束时,它的子进程(被调用的进程)也会被停止,至少是默认行为。
一种选择是继续读取管道(并保持调用者进程运行),直到子进程结束。

在退出之前,您的代码也缺少pclose(in)

另见this other post on StackOverflow

答案 2 :(得分:0)

在这里https://github.com/arun11299/cpp-subprocess

此库可以正是您所需要的。