在将 OpenOCD 与 GDB 一起使用时防止 sigint 关闭 OpenOCD
Prevent sigint from closing OpenOCD when using OpenOCD with GDB
我正在尝试编写一个脚本来在后台启动 OpenOCD,然后启动 GDB 实例并连接到我的 OpenOCD 服务器。这主要是有效的,只是一旦我键入中断字符来停止目标,我正在调试我的 OpenOCD 服务器退出。 OpenOCD 似乎正在接收 SIGINT。
我尝试过以多种不同的方式将 OpenOCD 与 GDB 分开,此时我的脚本如下所示:
#! /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
我很确定这应该是非常矫枉过正,但只要我在 GDB 中键入中断字符,OpenOCD 仍然会退出。如果我 运行 直接从我的 shell (不是脚本的一部分)执行相同的命令,一切都会按预期进行。即使我只是 运行 openocd -f openocd-jlink.cfg &
后跟 GDB,它也能工作,不需要单独的 shell、nohup
或捕获 SIGINT。
我希望有人知道我可以在我的脚本中做什么来防止 GDB 中的 SIGINT 到达 OpenOCD。也许有某种方法可以完全从 shell 进行守护进程?我在这里阅读了很多关于脚本中 SIGINT 的一般问题的答案,所以我觉得这可能是 OpenOCD 和 GDB 特有的。
我已经使用 setsid
解决了这个问题。脚本的工作版本是:
#! /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
我最终使用 Python 启动 OpenOCD,看起来像这个:
subprocess.Popen(["openocd", "-f", "openocd-jlink.cfg", "-l", "/dev/null"], preexec_fn = os.setsid)
我正在尝试编写一个脚本来在后台启动 OpenOCD,然后启动 GDB 实例并连接到我的 OpenOCD 服务器。这主要是有效的,只是一旦我键入中断字符来停止目标,我正在调试我的 OpenOCD 服务器退出。 OpenOCD 似乎正在接收 SIGINT。
我尝试过以多种不同的方式将 OpenOCD 与 GDB 分开,此时我的脚本如下所示:
#! /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
我很确定这应该是非常矫枉过正,但只要我在 GDB 中键入中断字符,OpenOCD 仍然会退出。如果我 运行 直接从我的 shell (不是脚本的一部分)执行相同的命令,一切都会按预期进行。即使我只是 运行 openocd -f openocd-jlink.cfg &
后跟 GDB,它也能工作,不需要单独的 shell、nohup
或捕获 SIGINT。
我希望有人知道我可以在我的脚本中做什么来防止 GDB 中的 SIGINT 到达 OpenOCD。也许有某种方法可以完全从 shell 进行守护进程?我在这里阅读了很多关于脚本中 SIGINT 的一般问题的答案,所以我觉得这可能是 OpenOCD 和 GDB 特有的。
我已经使用 setsid
解决了这个问题。脚本的工作版本是:
#! /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
我最终使用 Python 启动 OpenOCD,看起来像这个:
subprocess.Popen(["openocd", "-f", "openocd-jlink.cfg", "-l", "/dev/null"], preexec_fn = os.setsid)