如何实时获取子进程的标准输出?

时间:2021-01-08 12:49:02

标签: c++ linux popen

我想实时捕获子任务的标准输出,我的子任务是由 popen 创建的。但是我发现我的代码有很大的延迟。 下面是我的例子:

// works.
app.use((err: any, req:express.Request, res: express.Response, next: express.NextFunction) => {
    // SOMETHING
});

我尝试过 setvbuf 但没有运气。如果我删除“sleep 1”,那么输出很快。必须有其他地方在做缓冲。如何让它工作?

2 个答案:

答案 0 :(得分:0)

弹出后,你可以这样做:

if (fcntl(fileno(out), F_SETFL, O_NONBLOCK) < 0)
        exit(1);

答案 1 :(得分:0)

我现在知道为什么了。我必须在子进程中调用 setvbuf,而不是父进程。