详解主动终止Node.js进程的几种方法


当前第2页 返回上一页

当事件发射器发出没有侦听器的 error 事件时,将会抛出所发出的参数。然后将抛出出一个错误并导致进程退出:

1

2

3

4

5

6

7

8

9

10

11

events.js:306

    throw err; // Unhandled 'error' event

    ^

Error [ERR_UNHANDLED_ERROR]: Unhandled error. (undefined)

    at EventEmitter.emit (events.js:304:17)

    at Object.<anonymous> (/tmp/foo.js:1:40)

    ... TRUNCATED ...

    at internal/main/run_main_module.js:17:47 {

  code: 'ERR_UNHANDLED_ERROR',

  context: undefined

}

确保在你使用的事件发射器实例中侦听 error 事件,以便你的程序可以正常处理事件而不会崩溃。

信号

信号是操作系统提供的机制,用于把用数字表示的消息从一个程序发送到另一个程序。这些数字通常用等价的常量字符串来表示。例如,信号 SIGKILL 代表数字信号 9。信号可以有不同的用途,但通常用于终止程序。

不同的操作系统可以定义不同的信号,但是下面列表中的信号一般是通用的:

名称编号可处理Node.js 默认信号用途
SIGHUP1终止父终端已关闭
SIGINT2终止终端试图中断,按下 Ctrl + C
SIGQUIT3终止终端试图退出,按下 Ctrl + D
SIGKILL9终止进程被强行杀死
SIGUSR110启动调试器用户定义的信号1
SIGUSR212终止用户定义的信号2
SIGTERM12终止代表优雅的终止
SIGSTOP19终止进程被强行停止

如果程序可以选择实现信号处理程序,则 Handleable 一列则为。为的两个信号无法处理。 Node.js 默认 这一列告诉你在收到信号时,Node.js 程序的默认操作是什么。最后一个信号用途指出了信号对应的作用。

在 Node.js 程序中处理这些信号可以通过侦听 process 对象上的更多事件来完成:

1

2

3

4

5

#!/usr/bin/env node

console.log(`Process ID: ${process.pid}`);

process.on('SIGHUP', () => console.log('Received: SIGHUP'));

process.on('SIGINT', () => console.log('Received: SIGINT'));

setTimeout(() => {}, 5 * 60 * 1000); // keep process alive

在终端窗口中运行这个程序,然后按 Ctrl + C,这个进程不会被终止。它将会声明已接收到 SIGINT 信号。切换到另一个终端窗口,并根据输出的进程 ID 值执行以下命令:

1

$ kill -s SIGHUP <PROCESS_ID>

这演示了一个程序怎样向另一个程序发送信号,并且在第一个终端中运行的 Node.js 程序中输出它所接收到的 SIGHUP 信号。

你可能已经猜到了,Node.js 也能把命令发送到其他程序。可以用下面的命令以把信号从临时的 Node.js 进程发送到你现有的进程:

1

$ node -e "process.kill(<PROCESS_ID>, 'SIGHUP')"

这还会在你的第一个程序中显示 SIGHUP 消息。现在,如果你想终止第一个进程,要运行下面的命令向其发送不能处理的 SIGKILL 信号:

1

$ kill -9 <PROCESS_ID>

这时程序应该结束。

这些信号在 Node.js 程序中经常用于处理正常的关闭事件。例如,当 Kubernetes Pod 终止时,它将向程序发送 SIGTERM 信号,之后启动 30 秒计时器。然后程序可以在这 30 秒内正常关闭自己,关闭连接并保存数据。如果该进程在此计时器后仍保持活动状态,则 Kubernetes 将向其发送一个 SIGKILL

更多编程相关知识,请访问:编程视频!!

以上就是详解主动终止Node.js进程的几种方法的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

深入了解node.js中的非阻塞 i/o

canvas实现九宫格心形拼图的方法(附代码)

什么是跨域访问?从前端和后端两个角度出发

css3 cubic-bezier()实现链接悬停动画效果的方法介绍

什么是前端?

浅谈网页中提升svg文件可访问性的几种方法

css实现页面底部固定的方法介绍(附代码)

分享一个实用nodejs npm包:koa-csrf

纯css实现加号一个的效果(代码示例)

前端开发紧密相关的http协议知识

更多相关阅读请进入《前端》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...