假设我在node.js中有以下代码:
process.on('SIGTERM', function () {
process.exit(0);
});
for (var i = 0; i < 100; i++) {
console.error(i);
}
代码是否始终打印最多100个数字?
答案 0 :(得分:3)
这很容易测试:
process.on('SIGTERM', function () {
console.log('*** GOT SIGTERM ***');
process.exit(0);
});
process.kill(process.pid);
for (var i = 0; i < 100; i++) {
console.error(i);
}
结果表明,确实for
循环确实已完成,但这是误导性的。 for
循环阻止I / O.由于Node是单线程的,因此在process.exit(0)
循环完成之前不会调用for
。
更具说明性的例子:
process.on('SIGTERM', function () {
console.log('*** GOT SIGTERM ***');
process.exit(0);
});
process.kill(process.pid);
setTimeout(function() {
for (var i = 0; i < 100; i++) {
console.error(i);
}
}, 1000);
这里我们使用setTimeout
等待1秒,然后再进行for
循环。节点的事件循环将在此期间继续运行,因此process.on('SIGTERM')
将在for
循环开始之前调用。结果不同: for循环根本不运行。
调用process.exit(0)
后,应用程序结束,不会执行任何其他操作。当调用 process.exit(0)
时,两个示例之间的区别是。