Bash 将 SIGINT 路由到从 Bash 脚本开始的 file/process

Bash route a SIGINT to a file/process started from Bash script

我有一个执行 NodeJS 文件的 bash 脚本 (startup.sh),这个 javascript 文件侦听 SIGINT 信号。我正在 运行 解决这个问题,当我通过 startup.sh 运行 整个设置然后使用 Control + C 时,这似乎会在 bash 脚本之前终止 javascript 文件曾经收到信号。

有什么方法可以防止 startup.sh 在 SIGINT 信号上终止,而是将其路由到 javascript 文件?我一直在尝试一些使用 trap and kill 的解决方案,但我还没有走得太远。谢谢!

startup.sh

#!/bin/bash
node myFile.js

myFile.js

process.on("SIGINT", () => {
   console.log("Cleaning up")
   // Do some cleanup work
})

具体来说,在当前状态下,如果我 运行 node myFile.js 并发送 SIGINT,一切正常。但是,如果我 运行 startup.sh 然后发送一个 SIGINT 信号,我没有看到我假设的“正在清理”,因为 SIGINT 关闭了 startup.sh 进程,所以 myFile.js 从未收到此信号。

如果您的脚本只是这一行,exec 就可以了。如果可行,您也可以只使用 alias

如果您的启动脚本最终会变成一个更大的脚本,您可能会像这样捕获 sigint:

#!/bin/bash
  
tokill=$$

function no_ctrlc()
{
    echo "Killed the nodejs"
    kill -3 $tokill
    exit
}

trap no_ctrlc SIGINT


node myFile.js &
tokill=$!
wait