Я пытаюсь написать скрипт для запуска 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
I'm Я уверен, что это будет слишком излишним, но OpenOCD по-прежнему завершается, как только я набираю символ прерывания в GDB. Если я запускаю те же команды непосредственно из моей оболочки (не как часть скрипта), все работает как положено. Это работает, даже если я просто запускаю openocd -f openocd-jlink.cfg &
с последующим GDB, никакой отдельной оболочки, nohup
или перехват SIGINT не требуется.
Я надеюсь, что кто-то может иметь представление о том, что я могу сделать в мой сценарий, чтобы SIGINT в GDB не достиг OpenOCD. Может быть, есть какой-то способ полностью демонизироваться из оболочки? Я прочитал здесь много ответов о более общих c проблемах с SIGINT в сценариях, поэтому у меня есть ощущение, что это может быть что-то определенное c для OpenOCD и GDB.