当前位置: 首页 > 面试题库 >

在Node.js退出之前进行清理操作

蒋向笛
2023-03-14
问题内容

我想告诉Node.js无论出于何种原因(Ctrl+ C,异常或任何其他原因)总是在退出之前总是做一些事情。

我尝试了这个:

process.on('exit', function (){
    console.log('Goodbye!');
});

我开始了该过程,将其杀死,但没有任何反应。我再次启动它,按Ctrl+ C,仍然没有任何反应…


问题答案:

更新:

您可以注册一个处理程序,process.on('exit')并在任何其他情况下(SIGINT或未处理的异常)进行调用process.exit()

process.stdin.resume();//so the program will not close instantly

function exitHandler(options, exitCode) {
    if (options.cleanup) console.log('clean');
    if (exitCode || exitCode === 0) console.log(exitCode);
    if (options.exit) process.exit();
}

//do something when app is closing
process.on('exit', exitHandler.bind(null,{cleanup:true}));

//catches ctrl+c event
process.on('SIGINT', exitHandler.bind(null, {exit:true}));

// catches "kill pid" (for example: nodemon restart)
process.on('SIGUSR1', exitHandler.bind(null, {exit:true}));
process.on('SIGUSR2', exitHandler.bind(null, {exit:true}));

//catches uncaught exceptions
process.on('uncaughtException', exitHandler.bind(null, {exit:true}));


 类似资料:
  • 问题内容: 我正在使用共享内存的程序上工作。所述程序的多个实例将连接到现有程序或重新创建它,并在没有其他进程的情况下将其返回给OS,或者只是将其分离并终止。我想到了使用一个简单的计数器来跟踪使用它的进程数。 我正在使用函数进行清理,但是afaik在收到SIGKILL信号后,进程将不会进行任何清理,因此,如果这些进程中的任何一个不能正常终止,我可能永远无法清理内存。 有没有办法指定即使在SIGKIL

  • 我想从android客户端上传图像文件到服务器(服务器制作缩略图,并返回缩略图的url)。 然而,我塞进了这个错误消息。 我试着在stackoverflow中找到这个错误代码,但是我找不到Android的答案。 这是客户端代码(imgURL看起来像/storage/emulated/0/dcim/img/1493742568136.jpg)

  • 问题内容: 在我的项目中,我必须在所有测试之前进行一些存储库设置。这是使用一些棘手的静态规则完成的。但是,在所有测试之后,我不知道如何进行清理。我不想保留一些不可思议的静态数字来引用所有测试方法的编号,我应该一直保持这种状态。 最受赞赏的方法是添加一些将在所有测试后调用的侦听器。JUnit4中已经有用于它的任何接口吗? 编辑:这与@BeforeClass和@AfterClass无关,因为我必须知道

  • 问题内容: 用于退出的命令是什么?(即终止Node.js进程) 问题答案: 调用全局对象的方法: 从文档: process.exit([code]) 以指定的结束进程。如果省略,则退出使用“成功”代码。 要以“失败”代码退出: 执行节点的外壳程序应将退出代码视为。

  • 首先:我是node的新手,也是编程的初学者。 我正在尝试用Express创建一个小型web应用程序,其唯一目标是从一个没有开放API的网站获取并重新格式化数据。 为了做到这一点,我决定学习刮痧,这把我带到了Cheerio和Request。 我以reddit为例来学习。本例的最终目标是收集首页上帖子的名称和href以及指向评论的url,然后进入该页面以刮取评论的数量。 下面是在GET请求中调用到/的

  • 我正试图用Anaconda在我的Windows10中安装Spark,但当我试图在JupyterNotebook中运行pyspark时,我遇到了一个错误。我正在遵循本教程中的步骤。然后,我已经下载了Java8并安装了Spark 3.0.0和Hadoop 2.7。 我已经为SPARK_HOME、JAVA_HOME设置了路径,并在“path”环境中包含了“/bin”路径。 在Anaconda pyspa