禁止组

时间:2018-03-17 16:07:08

标签: bash sigint

我有一个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已经关闭。

1 个答案:

答案 0 :(得分:-1)

您的指令中是否没有缺少的“&”(它会给出提示)?

openocd -f ...flags... 2>openocd.log &**&** arm-none-eabi-gdb-py
相关问题