【问题标题】: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?)。

【问题讨论】:

  • 你想在主进程死亡之前或之后查看子进程的输出?
  • 理想情况下,我希望能够在主进程死亡之前/之后跟踪子进程的输出

标签: node.js stdout child-process


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2015-01-21
    • 2021-04-15
    • 2015-06-08
    • 2011-09-08
    相关资源
    最近更新 更多