从分离的子进程获取输出

Posted

技术标签:

【中文标题】从分离的子进程获取输出【英文标题】:Getting output from detached spawned child process 【发布时间】:2020-01-30 12:14:30 【问题描述】:

我正在使用 node.js 启动一些需要一些时间的 shell 操作,例如:

find / -name myfile

所以我有

require('child_process').spawn('find', ['/', '-name', filename]);

由于我希望子进程在主进程终止时继续运行(假设它还将结果写入文件),因此我使用以下选项:

require('child_process').spawn('find', ['/', '-name', filename], detached: true, stdio: 'ignore');

但是,这意味着我无法在进程运行时接收任何数据,至少不能通过 stdout/stderr。我的问题是解决方案是否需要子进程写入某些资源,以及主进程轮询该资源以获取更新,或者是否有一些解决方法可以以不会在子进程之间创建依赖关系的方式管道数据进程和主进程(可能用mkfifo?)。

【问题讨论】:

你想在主进程死亡之前或之后查看子进程的输出? 理想情况下,我希望能够在主进程死亡之前/之后跟踪子进程的输出 【参考方案1】:

我找到了一个使用 Redis Pub/Sub 的不错的解决方案:两个进程都连接到同名的 Redis 频道,主进程在启动/重新启动时订阅该频道,并且生成的进程将进度消息发布到该频道具有关联的进程 ID。它确实需要运行 Redis 服务器,但在这种情况下,我已经在使用 Redis。我喜欢这个解决方案的原因是它不需要手动轮询驱动器或内存中的任何数据,并且可以扩展到多个衍生进程,将消息写入同一个 Redis 通道。

【讨论】:

以上是关于从分离的子进程获取输出的主要内容,如果未能解决你的问题,请参考以下文章

Python从完成的子进程中获取环境

如何将视频文件作为输入传递给 NodeJS 中的子进程并接收帧/图像作为输出?

Python:产生具有几个要求的子进程

从Java开始忽略/捕获子进程输出的最简单方法

在bash脚本中获取命令的子进程

为远程进程的子进程捕获标准输出