Node.js 面试题
目录

请解释 Node.js 的信号 (Signals) 机制。如何捕获和处理信号?

· 约 4 分钟读完 · 第 70 / 377 章

推荐答案

在 Node.js 中,信号(Signals)是操作系统用来通知进程发生了某些事件的一种机制。常见的信号包括 SIGINT(中断信号,通常由 Ctrl+C 触发)、SIGTERM(终止信号,通常由系统关闭或 kill 命令触发)等。Node.js 提供了 process 对象来处理这些信号。

捕获和处理信号

你可以通过 process.on() 方法来捕获和处理信号。以下是一个简单的示例:

在这个示例中,当进程接收到 SIGINT 或 SIGTERM 信号时,会执行相应的回调函数,并在回调函数中进行清理操作后退出进程。

本题详细解读

信号机制

信号是操作系统提供的一种进程间通信机制,用于通知进程发生了某些事件。每个信号都有一个唯一的编号和名称。例如,SIGINT 是信号编号 2,表示中断信号;SIGTERM 是信号编号 15,表示终止信号。

Node.js 中的信号处理

Node.js 通过 process 对象提供了对信号的处理能力。process 对象是 Node.js 的全局对象,提供了与当前进程相关的信息和控制方法。

process.on(signal, callback)

process.on() 方法用于监听指定信号。当进程接收到该信号时,会调用相应的回调函数。回调函数可以执行一些清理操作,然后调用 process.exit() 来终止进程。

常见信号

  • SIGINT: 通常由用户按下 Ctrl+C 触发,用于中断进程。
  • SIGTERM: 通常由系统关闭或 kill 命令触发,用于请求进程终止。
  • SIGKILL: 强制终止进程,无法被捕获或忽略。
  • SIGUSR1 和 SIGUSR2: 用户自定义信号,可用于进程间通信。

示例代码

以下是一个更复杂的示例,展示了如何处理多个信号并执行不同的操作:

在这个示例中,进程可以处理 SIGINT、SIGTERM、SIGUSR1 和 SIGUSR2 信号,并根据不同的信号执行不同的操作。

注意事项

  • SIGKILL 信号无法被捕获或忽略,它会强制终止进程。
  • 在信号处理函数中,应尽量避免执行耗时操作,以免阻塞进程。
  • 信号处理函数中应确保资源的正确释放,避免资源泄漏。

通过理解和正确使用 Node.js 的信号机制,可以更好地控制进程的行为,确保在进程终止前执行必要的清理操作。