javascript - Bash 将 SIGINT 路由到从 Bash 脚本启动的文件/进程
问题描述
我有一个执行 NodeJS 文件的 bash 脚本(startup.sh),这个 javascript 文件侦听 SIGINT 信号。我遇到的问题是,当我通过 startup.sh 运行整个设置然后使用 Control + C 时,这似乎会在 javascript 文件收到信号之前杀死 bash 脚本。
有什么方法可以防止 startup.sh 终止 SIGINT 信号,而是将其路由到 javascript 文件?我一直在尝试使用陷阱和杀死的一些解决方案,但我还没有走得很远。谢谢!
启动.sh
#!/bin/bash
node myFile.js
我的文件.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
如果可行,您也可以只使用。
如果您的启动脚本最终会变成一个更大的脚本,您可能只是捕获信号,如下所示:
#!/bin/bash
tokill=$$
function no_ctrlc()
{
echo "Killed the nodejs"
kill -3 $tokill
exit
}
trap no_ctrlc SIGINT
node myFile.js &
tokill=$!
wait
推荐阅读
- python - 根据另一个列表中的值创建相应的 RGB 列表(颜色图)
- python-3.x - 当前线程 0x00002fe0(最近一次调用优先):
- docker - 挂载卷会覆盖存储在 Docker 映像中的文件
- html - 如何在支持所有 IE 浏览器的 UI 上创建带计时器的圆圈
- php - 通过 LAN 将在线内容共享到另一台未连接到 Internet 的计算机
- c - 为什么当我从同一个指针获取值时结果不同
- tensorflow - pytorchgather()的tensorflow等效实现
- r - R GGPLOT2 Alternate panel.background 填充白色和灰色
- salesforce - Salesforce SFDX 在创建项目时出错
- python - python如何在无限循环期间处理KeyboardInterrupt?