我有一个bash脚本,它启动了2个进程:
openocd ...flags... 2>openocd.log &
arm-none-eabi-gdb
在gdb中,使用 Ctrl + C 中断执行会导致openocd也接收SIGINT,因此它会停止。我试图通过以下方式将SIGINT直接捕获并重新发布到gdb:
trap 'kill 2 $!' INT
但除了要求root之外,它无论如何都不起作用:
./dbg.sh: 1: kill: No such process
是否有优雅的方式来执行任务?
__
嗯,运行带有调试选项的脚本有很多帮助。但我仍然遇到奇怪的行为。这是我的脚本的内容:
#!/bin/sh
set -vx
trap 'killall -s2 arm-none-eabi-gdb-py' 2
openocd -f ...flags... 2>openocd.log & arm-none-eabi-gdb-py
当我从不同的tty中运行killall -s2 arm-none-eabi-gdb-py时 - 它会终止远程目标的执行并且不会关闭openocd,而是通过 Ctrl + C 返回:
+ killall -s2 arm-none-eabi-gdb-py
arm-none-eabi-gdb-py: no process found
似乎陷阱根本不会抑制信号......改为陷阱' ps -ef' INT显示,当trap命令执行时,openocd和gdb已经关闭。
答案 0 :(得分:-1)
您的指令中是否没有缺少的“&”(它会给出提示)?
openocd -f ...flags... 2>openocd.log &**&** arm-none-eabi-gdb-py