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