当事件发射器发出没有侦听器的 error
事件时,将会抛出所发出的参数。然后将抛出出一个错误并导致进程退出:
1 2 3 4 5 6 7 8 9 10 11 |
|
确保在你使用的事件发射器实例中侦听 error
事件,以便你的程序可以正常处理事件而不会崩溃。
信号
信号是操作系统提供的机制,用于把用数字表示的消息从一个程序发送到另一个程序。这些数字通常用等价的常量字符串来表示。例如,信号 SIGKILL
代表数字信号 9。信号可以有不同的用途,但通常用于终止程序。
不同的操作系统可以定义不同的信号,但是下面列表中的信号一般是通用的:
名称 | 编号 | 可处理 | Node.js 默认 | 信号用途 |
---|---|---|---|---|
SIGHUP | 1 | 是 | 终止 | 父终端已关闭 |
SIGINT | 2 | 是 | 终止 | 终端试图中断,按下 Ctrl + C |
SIGQUIT | 3 | 是 | 终止 | 终端试图退出,按下 Ctrl + D |
SIGKILL | 9 | 否 | 终止 | 进程被强行杀死 |
SIGUSR1 | 10 | 是 | 启动调试器 | 用户定义的信号1 |
SIGUSR2 | 12 | 是 | 终止 | 用户定义的信号2 |
SIGTERM | 12 | 是 | 终止 | 代表优雅的终止 |
SIGSTOP | 19 | 否 | 终止 | 进程被强行停止 |
如果程序可以选择实现信号处理程序,则 Handleable 一列则为是。为否的两个信号无法处理。 Node.js 默认 这一列告诉你在收到信号时,Node.js 程序的默认操作是什么。最后一个信号用途指出了信号对应的作用。
在 Node.js 程序中处理这些信号可以通过侦听 process
对象上的更多事件来完成:
1 2 3 4 5 |
|
在终端窗口中运行这个程序,然后按 Ctrl + C
,这个进程不会被终止。它将会声明已接收到 SIGINT
信号。切换到另一个终端窗口,并根据输出的进程 ID 值执行以下命令:
1 |
|
这演示了一个程序怎样向另一个程序发送信号,并且在第一个终端中运行的 Node.js 程序中输出它所接收到的 SIGHUP
信号。
你可能已经猜到了,Node.js 也能把命令发送到其他程序。可以用下面的命令以把信号从临时的 Node.js 进程发送到你现有的进程:
1 |
|
这还会在你的第一个程序中显示 SIGHUP
消息。现在,如果你想终止第一个进程,要运行下面的命令向其发送不能处理的 SIGKILL
信号:
1 |
|
这时程序应该结束。
这些信号在 Node.js 程序中经常用于处理正常的关闭事件。例如,当 Kubernetes Pod 终止时,它将向程序发送 SIGTERM
信号,之后启动 30 秒计时器。然后程序可以在这 30 秒内正常关闭自己,关闭连接并保存数据。如果该进程在此计时器后仍保持活动状态,则 Kubernetes 将向其发送一个 SIGKILL
。
更多编程相关知识,请访问:编程视频!!
以上就是详解主动终止Node.js进程的几种方法的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
css3 cubic-bezier()实现链接悬停动画效果的方法介绍
更多相关阅读请进入《前端》频道 >>

Vue.js 设计与实现 基于Vue.js 3 深入解析Vue.js 设计细节
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者