Javascript 如何有目的地使node.js服务器崩溃?
如何有目的地使node.js服务器崩溃?(我希望在发生某些致命错误时执行此操作,以便立即提请我注意以进行修复) 我看过这篇文章,但我不想使用C模块或运行无休止的循环(因为我的应用程序运行在一个服务器上,我为我使用的CPU时间付费),这意味着将非常昂贵,很难最大化CPU 我尝试过使用process.exit和process.abort,但这只会关闭调用它的模块 例如,我的服务器是通过调用node main.js启动的,它需要几个我在其他文件中编写的自定义模块。如果在其中一个文件中调用process.exit或process.abort,则它将正确关闭这些其他文件中发生的任何事件,但不会关闭整个节点服务器和main.js 下面是一个简化的代码示例:Javascript 如何有目的地使node.js服务器崩溃?,javascript,node.js,crash,Javascript,Node.js,Crash,如何有目的地使node.js服务器崩溃?(我希望在发生某些致命错误时执行此操作,以便立即提请我注意以进行修复) 我看过这篇文章,但我不想使用C模块或运行无休止的循环(因为我的应用程序运行在一个服务器上,我为我使用的CPU时间付费),这意味着将非常昂贵,很难最大化CPU 我尝试过使用process.exit和process.abort,但这只会关闭调用它的模块 例如,我的服务器是通过调用node main.js启动的,它需要几个我在其他文件中编写的自定义模块。如果在其中一个文件中调用process
//crashServer.js
var exampleVar;
module.exports = function(){
if (!exampleVar){
var err = new Error("An error has occured");
Error.captureStackTrace(err);
//error logging code
console.log("An error has occured and the server will now crash.");
process.exit();
}
};
//main.js
var crashServer = require("./crashServer.js");
crashServer();
while (true){
console.log("Server still running");
}
如果我跑
node main.js
然后它将打印出仍在无限期运行的服务器
如果我删除while-true循环,它只会打印出“发生错误,服务器现在将崩溃”,然后退出(因为没有更多的代码要运行)。这证明process.exit命令正在运行,而while(true)循环仍在运行
我还有其他方法可以做到这一点吗?Javascript中的无限循环简直是邪恶的,因为它们不允许事件循环执行任何正常的关闭处理,其中一些是允许在关闭过程中处理某些Javascript事件所必需的 如果替换此无限循环:
while (true){
console.log("Server still running");
}
为此:
setInterval(function() {
console.log("server still running");
}, 1000);
然后您的服务器应该关闭 Uhhh,
process.exit()
关闭当前进程,包括它加载的所有模块。您是否有可能运行多个进程?我使用process.exit()
关闭我的node.js服务器,它工作得很好。@jfriend00我用一个例子编辑了我的问题,以说明Javascript中的meInfinite循环的情况很糟糕,因为它们不允许事件循环执行任何正常的关闭处理。如果将while(true)
循环替换为setInterval(function(){console.log(“服务器仍在运行”);},1000)
,则服务器应关闭。无需删除您的问题。你问了一个问题,得到了回答。