NodeJS 是否有可能在节点子进程中捕获SIGINT,进行一些清理,并仍然以SIGINT退出?

jfgube3f  于 2023-03-01  发布在  Node.js
关注(0)|答案(1)|浏览(133)

当一个子进程接收到一个SIGINT时,我想做一些清理工作。然后我想让父进程知道子进程退出时有一个SIGINT。
第一部分很简单,但第二部分并不像下面的例子所展示的那样。有什么方法可以让最初接收到的信号通过吗?

process.on("SIGINT", () => {
  // Do some cleanup here

  process.exit() // No way to pass the the original signal "SIGINT!", since exit(<code>) only excepts 1 argument.
})

// Therefore, 'signal is never set here 
parent.child.on("exit", (code, signal) => {
  // signal is empty
})
nkoocmlb

nkoocmlb1#

是的,它是。
可以使用process.kill()方法在清理完成后将SIGINT信号发送到子进程。
使用SIGINT信号退出子进程,然后可以使用child_process.on('exit')事件的第二个参数访问父进程中的信号值。
总之,当父进程接收到SIGINT信号时,它将执行清除,然后使用kill()方法向子进程发送SIGINT信号。
然后,子进程将收到SIGINT信号并退出,状态代码为0。然后,父进程可以访问exit事件侦听器中的信号值。

相关问题