首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止sigint在GDB中使用OpenOCD时关闭OpenOCD

防止sigint在GDB中使用OpenOCD时关闭OpenOCD
EN

Stack Overflow用户
提问于 2020-01-19 03:36:50
回答 1查看 213关注 0票数 0

我试图在后台编写一个启动OpenOCD的脚本,然后启动并执行连接到我的OpenOCD服务器的GDB实例。除了输入中断字符以停止正在调试的目标,我的OpenOCD服务器就会退出,这主要是可行的。看来OpenOCD正在接收SIGINT。

我试图通过多种不同的方式将OpenOCD从GDB中分离出来,此时我的脚本如下所示:

代码语言:javascript
复制
#! /bin/sh

trap '' SIGINT && nohup sh -c "trap '' SIGINT & openocd -f openocd-jlink.cfg < /dev/null" &
OPENOCD_PID=$!

arm-none-eabi-gdb -ex "set architecture armv6-m" -ex "target extended-remote localhost:2331" obj/main.elf

kill $OPENOCD_PID

我非常肯定,这应该是非常过分,但OpenOCD仍然存在,只要我键入中断字符在GDB。如果我直接从shell (而不是脚本的一部分)运行相同的命令,那么一切都按预期的方式工作。即使我只运行openocd -f openocd-jlink.cfg &和GDB,也不需要单独的shell、nohup或捕获SIGINT。

我希望有人知道我可以在我的脚本中做些什么来阻止GDB中的SIGINT到达OpenOCD。也许有什么方法可以完全从shell中去守护?我在这里读过很多关于脚本中关于SIGINT的一般性问题的答案,所以我觉得这可能是OpenOCD和GDB特有的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-22 04:04:31

我通过使用setsid成功地解决了这个问题。脚本的工作版本是:

代码语言:javascript
复制
#! /bin/sh

setsid openocd -f openocd-jlink.cfg -l /dev/null &

arm-none-eabi-gdbm" -ex "target extended-remote localhost:2331" obj/main.elf

killall openoc

由于我希望脚本在macOS上工作,而Linux和macOS也不附带setsid,所以我最终使用setsid启动了OpenOCD,如下所示:

代码语言:javascript
复制
subprocess.Popen(["openocd", "-f", "openocd-jlink.cfg", "-l", "/dev/null"], preexec_fn = os.setsid)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59806946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档