【发布时间】:2014-03-23 17:54:20
【问题描述】:
我在 Ubuntu 上的 Node.js 中有以下程序:
process.on ("SIGINT", function(){
console.log("You clicked Ctrl+C!");
process.exit(1);
});
while(1) {
}
当我单击 Ctrl+C 时,我在屏幕上看到“^C”,但没有打印任何其他内容,进程不会退出。
如果没有“process.on...”语句,Ctrl+C 会立即导致 Node 退出。
我做错了什么?
【问题讨论】:
-
我相信,由于你的 while(1) 循环永远不会产生,事件循环没有轮到处理 control-C。否则,您正在做的事情看起来应该可以工作。
-
嗯。我可以试着回答这个问题——你对什么信号有多熟悉?与“C 代码”(又名,直接添加带有 sigaction 或信号的信号处理程序)不同 - 在 Node 中,它们不会导致程序突然运行其他代码。相反,它们由节点处理并“移交”给事件循环。由于 Node 运行 JavaScript 单线程(通常)并且您永远不会产生控制权 - 事件处理程序永远不会被调用,因为繁忙的等待会使其死锁(同样,一次只运行一件事)。在 Node 中,您必须从不阻塞事件循环。
标签: node.js events signals sigint