<mui:ModernWindow.MenuLinkGroups>
<mui:LinkGroup DisplayName="MenuItem1">
<mui:LinkGroup.Links>
<mui:Link DisplayName="Page 1" Source="/Sample1.xaml" />
</mui:LinkGroup.Links>
</mui:LinkGroup>
<mui:LinkGroup DisplayName="MenuItem2">
<mui:LinkGroup.Links>
<mui:Link DisplayName="Page 1" Source="/Sample2.xaml" />
</mui:LinkGroup.Links>
</mui:LinkGroup>
</mui:ModernWindow.MenuLinkGroups>
我知道我可以防范var spawn = require('child_process').spawn;
var child = spawn('some-command');
(当ENOENT
不存在时)
some-command
现在,我如何异步确定流程正在运行并且没有发生错误?
我可以收听child.on('error', function(err) { ... })
和error
个事件,但这仍然是&#34; 正在运行&#34;看起来与&#34; 相同,操作系统还没有找到文件&#34;,这会导致讨厌的竞争条件。
close
- 事件会很好,但the docs不提一个。
是否存在功能性解决方法?
答案 0 :(得分:2)
除非子进程在节点中打印出被解析和跟踪的内容(通过您或某人必须编写的代码),或者使用状态代码退出,否则无法从操作系统获得nodejs或iojs可以从中获取的内容系统调用并为开发人员提供JS API。
至少在Linux上,进程的操作系统状态仅限于以下之一:
此外,一旦使用wait()
或waitpid()
检索退出状态,它就不再可用。
“错误”的概念通常取决于应用程序,操作系统不会跟踪这些应用程序错误 - 除了进程在退出时报告的退出状态整数。
为了给出更清晰的示例,许多应用程序具有打开文件进行处理的命令,并且在无法打开输入文件时将打印错误消息并继续执行下一个命令。此故障不是由操作系统中的PID跟踪的进程状态的一部分,而是保存在某个位置的内存中,以便可以从另一个进程读取。它可能出现在stderr或stdout流中,并且可以以这种方式读取,但需要特定的编码才能由父进程或其他进程正确解释。或者,当出现严重错误时,其他应用程序将立即退出,并将退出状态设置为非零数字,表示错误。退出状态和流程终止的事实可从操作系统获得。