У меня есть сценарий bash, который запускает 2 процесса:
openocd ...flags... 2>openocd.log &
arm-none-eabi-gdb
В gdb прерывание выполнения с помощью Ctrl + C приводит к тому, что openocd также получает SIGINT и, таким образом, останавливается. Я попытался перехватить и перевыпустить SIGINT прямо в gdb с помощью:
trap 'kill 2 $!' INT
Но кроме требования рута это все равно не работает:
./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
Когда я запускаю killall -s2 arm-none-eabi-gdb-py из другого tty - он завершает выполнение удаленной цели и не закрывает openocd, а отправляет SIGINT через Ctrl + C < / kbd> возвращает:
+ killall -s2 arm-none-eabi-gdb-py
arm-none-eabi-gdb-py: no process found
Похоже, что trap вообще не подавляет сигналы ... переход на trap 'ps -ef' INT показывает, что openocd И gdb уже отключены, когда выполняется команда trap.
trap
) и добавитьset -vx
передtrap
, чтобы увидеть, что и когда устанавливается. Не уверен, чтоset -vx
выдастtrap
след, но попробовать стоит. Удачи. - person shellter   schedule 18.03.2018kill 2 $!
должно бытьkill -2 $!
. - person John Kugelman   schedule 19.10.2018