我有一个干净的Windows 8.1框,安装了lates node.js(v0.10.29).我在两个文件中有以下测试代码:
a.js
var sub = require('child_process').spawn('node', ['b.js'], {silent: true});
sub.stdout.on("data", function (data) {console.log(data.toString());});
Run Code Online (Sandbox Code Playgroud)
b.js
console.log("DEBUG 1");
console.log("DEBUG 2");
process.exit();
Run Code Online (Sandbox Code Playgroud)
如果我a.ja通过执行:
node a.js
Run Code Online (Sandbox Code Playgroud)
我将在控制台输出中看到"DEBUG 1" - 但不是"DEBUG 2".如果我删除process.exit(),两行将正确显示.这种奇怪的行为发生在fork和spawn.
任何提示?相同的代码在linux上没有问题.
更新02.07.2014
似乎这不是exit()和log()之间的竞争条件,因为将其更改为纯序列会产生相同的错误:
function print(text, next) { console.log(text); next(); }
print("DEBUG 1", function () {
print("DEBUG 2", function () {
process.exit();
});
});
Run Code Online (Sandbox Code Playgroud)
更新03.07.2014
silent未列在spawn()文档中,但它有效.它列在fork文档中,正如我之前提到的,这个问题与之相同fork.
似乎如果我在上一次输出和process.exit()所有工作之间引入延迟正确:
console.log("DEBUG 1");
console.log("DEBUG 2");
setTimeout(function () {process.exit();}, 10000); …Run Code Online (Sandbox Code Playgroud) node.js ×1