繁体   English   中英

在Node.js中,如何确定子进程是否已启动且没有错误?

[英]In Node.js, how do I determine if a child process has started without errors?

var spawn = require('child_process').spawn;
var child = spawn('some-command');

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

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

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


我可以侦听errorclose事件,但是仍然留下“ 正在运行 ”的情况,看起来与“ 操作系统还没有开始寻找文件的情况 ”相同,这可能会导致讨厌的竞争状况。

一个open事件会很好,但是文档中没有提及。

是否存在功能解决方法?

主机OS无法以这种易于使用的格式提供您要查找的信息(进程正在运行,没有错误)。

除非子进程在节点上打印了已解析和跟踪(由您或某人将要编写的代码)或通过状态代码退出的内容,否则无法从操作系统中获得表明nodejs或iojs可以从系统调用中获取的指示并为开发人员包装一个JS API。

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

  1. 进程正在运行; 要么
  2. 进程已退出(状态号表示OK或ERROR); 要么
  3. 不存在(没有此类PID)

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

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

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

另请参阅: 仅检查c中的状态过程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM