在我的程序中,我正在生成一个正在进行I / O工作的子进程。我订阅了子进程的退出事件。但是,在退出事件触发后,正在写入的文件似乎仍在使用。
来自nodejs docs https://nodejs.org/api/child_process.html#child_process_class_childprocess
请注意,当触发'exit'事件时,子进程stdio 流可能仍然是开放的。
如何检测文件处理已完成?我已经尝试过使用lsof,但是需要花费很多时间(大约需要10秒钟才能运行一次,而且我最终会执行多次,就像在第一个瞬间一样,文件可能不是免费的)
答案 0 :(得分:1)
您可以使用close
事件检查所有stdio流何时关闭。
每Node.js v9.2.1 Documentation - ChildProcess
事件:'关闭'
- 代码如果子项自行退出,则退出代码。
- 信号子进程终止的信号。
当子进程的stdio流进行时,会发出'close'事件 已经关闭。这与'退出'事件不同,因为 多个进程可能共享相同的stdio流。