在`popen` hangs生成的流上调用`fgets`

时间:2016-11-03 18:16:28

标签: c++ macos posix popen fgets

我有一个应用程序,它使用以下代码运行cmd并获取其输出:

std::string cmd = "ps -a -x -o pid,ppid,state,command | grep myProcess | grep -v 'grep' | awk '{ print $1, $2, $3 }'";
char buf[BUF_SIZE];
std::stringstream output;
std::string err;
int exitCode;
FILE* proc = popen(cmd.c_str(), "r");

if (proc == NULL) {
    exit(1);
}
while (fgets(buf, BUF_SIZE, proc) != NULL) {
    output << buf;
}
exitCode = pclose(proc);

std::string outputStr = output.str();

我遇到的问题是该函数会随机卡在fgets函数上。我不能一直让它卡住。

怎么会发生这种情况?

代码在macOS 10.10及更高版本下运行。

0 个答案:

没有答案