问题描述
我想实时捕获子任务的标准输出,我的子任务是由 popen 创建的。但是我发现我的代码有很大的延迟。 下面是我的例子:
// works.
app.use((err: any,req:express.Request,res: express.Response,next: express.NextFunction) => {
// SOMETHING
});
我尝试过 setvbuf 但没有运气。如果我删除“sleep 1”,那么输出很快。必须有其他地方在做缓冲。如何让它工作?
解决方法
弹出后,你可以这样做:
if (fcntl(fileno(out),F_SETFL,O_NONBLOCK) < 0)
exit(1);
,
我现在知道为什么了。我必须在子进程中调用 setvbuf,而不是父进程。