我可以在退出时检测子进程是否已完成处理吗?

时间:2017-12-12 10:11:16

标签: node.js

在我的程序中,我正在生成一个正在进行I / O工作的子进程。我订阅了子进程的退出事件。但是,在退出事件触发后,正在写入的文件似乎仍在使用。

来自nodejs docs https://nodejs.org/api/child_process.html#child_process_class_childprocess

  

请注意,当触发'exit'事件时,子进程stdio   流可能仍然是开放的。

如何检测文件处理已完成?我已经尝试过使用lsof,但是需要花费很多时间(大约需要10秒钟才能运行一次,而且我最终会执行多次,就像在第一个瞬间一样,文件可能不是免费的)

1 个答案:

答案 0 :(得分:1)

您可以使用close事件检查所有stdio流何时关闭。

Node.js v9.2.1 Documentation - ChildProcess

  

事件:'关闭'

     
      
  • 代码如果子项自行退出,则退出代码。
  •   
  • 信号子进程终止的信号。
  •   
     

当子进程的stdio流进行时,会发出'close'事件   已经关闭。这与'退出'事件不同,因为   多个进程可能共享相同的stdio流。