我正在尝试编写一个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;在执行命令结束时没有帮助。
答案 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)
。
答案 2 :(得分:0)
在这里https://github.com/arun11299/cpp-subprocess
此库可以正是您所需要的。