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
我有一个执行 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