gpt4 book ai didi

javascript - 即使被信号处理程序中断,node.js 代码是否运行完成?

转载 作者:搜寻专家 更新时间:2023-10-31 23:48:04 25 4
gpt4 key购买 nike

假设我在 node.js 中有以下代码:

process.on('SIGTERM', function () {
process.exit(0);
});

for (var i = 0; i < 100; i++) {
console.error(i);
}

代码是否总是打印 100 以内的所有数字?

最佳答案

这很容易测试:

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 在执行for 循环之前等待1 秒。 Node 的事件循环将在此期间继续运行,因此 process.on('SIGTERM') 将在 for 循环开始之前被调用。结果不同:for 循环根本不运行

一旦 process.exit(0) 被调用,应用程序就会结束并且不会执行任何其他操作。这两个示例的区别在于何时 process.exit(0) 被调用。

关于javascript - 即使被信号处理程序中断,node.js 代码是否运行完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29307539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com