我有一个应用程序,它使用以下代码运行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及更高版本下运行。