【问题标题】:In Node.js, how do I determine if a child process has started without errors?在 Node.js 中,如何确定子进程是否已启动且没有错误?
【发布时间】:2015-08-29 23:23:52
【问题描述】:
var spawn = require('child_process').spawn;
var child = spawn('some-command');

我知道我可以防范ENOENT(当some-command 不存在时)

child.on('error', function(err) { ... })

现在,我如何异步确定进程正在运行并且没有发生错误


我可以监听 errorclose 事件,但这仍然使“正在运行”的情况看起来与“操作系统尚未解决正在寻找文件”,这可能会导致令人讨厌的竞争条件。

open-event 会很好,但 the docs 不要提及。

是否存在功能性解决方法?

【问题讨论】:

    标签: javascript node.js error-handling child-process


    【解决方案1】:

    您正在寻找的信息(进程正在运行,没有错误)无法从主机操作系统以如此易于使用的格式提供。

    除非子进程打印出在 node 中解析和跟踪的内容(通过您或某人必须编写的代码),或者以状态码退出,否则操作系统不会提供 nodejs 或 iojs 可以从中获取的指示一个系统调用并为开发者封装一个 JS API。

    至少在 Linux 上,进程的操作系统状态仅限于以下之一:

    1. 进程正在运行;或
    2. 进程已退出(状态编号表示OK或ERROR);或
    3. 不存在(没有这样的 PID)

    此外,一旦使用wait()waitpid() 检索到退出状态,它就不再可用。

    “错误”的概念通常取决于应用程序,操作系统不会跟踪这些应用程序错误——除了进程退出时报告的退出状态整数。

    举个更清楚的例子,许多应用程序都有打开文件进行处理的命令,当输入文件无法打开时会打印错误消息并继续执行下一个命令。此故障不是由操作系统中的 PID 跟踪并保存在内存中某处以便可以从另一个进程中读取的进程状态的一部分。它可能出现在 stderr 或 stdout 流中,并且可以通过这种方式读取,但需要特定的编码才能被父进程或其他进程正确解释。或者,当出现严重错误时,其他应用程序将立即退出,并将退出状态设置为非零数字,指示错误。该退出状态和进程终止的事实可从操作系统获得。

    另请参阅:Just check status process in c

    【讨论】:

      猜你喜欢
      • 2012-03-31
      • 2020-01-08
      • 2019-04-30
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      相关资源
      最近更新 更多