如何在 Node.js 中终止所有进程?

2025年2月21日 | 阅读 4 分钟

在 Node.js 中,我们可以使用 process.kill 方法来列出所有正在运行的进程,过滤出 Node.js 进程,然后使用 process.kill 来终止每个已识别的进程。在本文中,我们将讨论如何在 Node.js 中使用其语法、参数和示例来终止所有进程。

Node.js 中的 process.kill() 方法是什么?

Node.js 包含一个名为 process.kill(pid[,signal]) 的方法。 Node.js 代码向循环发送消息,以及 pid(交互 ID)和 sign,都包含在字符串设计中。

语法

它具有以下语法:

参数

如上所述并如下图所示,此技术需要两个参数:

  • PID:此边界包含交互 ID。
  • Signal:此边界包含字符串设计。
  • Signal names:这些是字符串格式。

SIGTERM

SIGINT

SIGHUP

在非 Windows 平台上,'SIGTERM' 和 'SIGINT' 信号的默认控制器是 128 + 信号编号,它会在退出前重置终端模式。如果其中一个信号有已引入的受众,其默认的 Node.js 行为将被移除。当控制中心窗口关闭时,会显示消息 'SIGHUP'。

返回值

如果目标 pid 无法找到或不存在,process.kill() 方法将抛出错误。此技术假定 pid 存在,返回布尔值 0,可用于测试目标交互是否存在。对于 Windows 用户,如果 pid 用于终止交互组,此技术也会抛出错误。

使用进程管理工具

  • PM2:PM2 是一个非常流行的 Node.js 应用程序进程管理器。它有助于应用程序管理并确保应用程序持续运行。输入命令 pm2 stopall 来终止所有 PM2 管理的进程。
  • Forever:Forever 是另一个进程管理器,可确保 Node.js 脚本无限期运行。运行命令 forever stopall 来终止 Forever 管理的所有进程。

使用命令行实用程序

  • killall (Linux/Unix):killall 命令终止通过名称标识的进程的所有实例。使用 killall 命令终止所有 Node.js 进程。

对于 Linux/Unix,请使用 pkill 命令

  • pkill 命令根据进程名称为其分配信号。
  • 对于 Node.js 进程,请使用 pkill node。对于 Windows,请使用 taskkill 命令。
    taskkill 命令通过进程 ID (PID) 或映像名称终止任务。
    使用 taskkill /F /IM node.exe 终止 Node.js 进程。

示例 1

此 Node.js 程序演示了如何使用 process.kill 方法来管理和终止进程。它配置了 SIGINT 信号的处理器,在接收到信号时打印一条消息,并安排进程在短暂延迟后退出。然后通过将 SIGINT 信号发送到其自身的 PID 来终止进程。

输出

 
Received SIGTERM signal in Node.js.
Exiting process.   

说明

在此示例中,此脚本创建了 SIGTERM 信号的侦听器,该信号在接收到时打印一条消息,等待 200 毫秒,然后退出进程。使用 process.kill,以编程方式将 SIGTERM 信号发送到进程。

示例 2

上面的 Node.js 脚本创建了一个 SIGHUP 信号的事件侦听器,在接收到信号时记录一条消息,并安排进程在短暂延迟后退出。最后,使用 process.kill 及其自身的 PID 和 SIGHUP 信号终止进程。

输出

 
Acknowledged SIGHUP signal in nodeJS.
Exiting.   

说明

此脚本配置了 SIGUSR1 信号的侦听器,在接收到信号时打印一条消息,等待 500 毫秒,然后终止进程。Process.kill 将 SIGUSR1 信号发送到进程。

结论

总之,我们需要有效地终止 Node.js 进程以保持应用程序的稳定性和可靠性。从 PM2 和 Forever 等高级进程管理工具到 killall、pkill 和 taskkill 等低级命令行实用程序,有多种方法可用于此目的。此外,Node.js 还提供了通过 process.exit() 和带信号处理的子进程以编程方式处理进程的方法。通过配置信号侦听器并发送正确的信号,开发人员可以确保进程正常终止并适当地释放资源。学习这些方法不仅是为了终止,也是为了掌握对 Node.js 进程生命周期的控制,这极大地增强了我们在 Node.js 环境中对系统管理的掌控力。这有助于提高应用程序性能,并且以后更容易调试。