Запретить SIGINT для процесса в группе

У меня есть сценарий 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.


person Peter V    schedule 17.03.2018    source источник
comment
попробуйте сделать все это одним скриптом (с включенным trap) и добавить set -vx перед trap, чтобы увидеть, что и когда устанавливается. Не уверен, что set -vx выдаст trap след, но попробовать стоит. Удачи.   -  person shellter    schedule 18.03.2018
comment
kill 2 $! должно быть kill -2 $!.   -  person John Kugelman    schedule 19.10.2018


Ответы (1)


Нет ли в вашей инструкции пропущенного '&' (это даст это)?

openocd -f ...flags... 2>openocd.log &**&** arm-none-eabi-gdb-py
person Bsquare ℬℬ    schedule 19.10.2018
comment
Нет, & правильно. & заставляет openocd работать в фоновом режиме (в отличие от ;, который запускает его на переднем плане). - person John Kugelman; 19.10.2018
comment
Так почему сразу после в той же строке есть команда arm-none-eabi-gdb-py? То есть выглядит странно и может отличаться от того, что задумал автор вопроса. - person Bsquare ℬℬ; 19.10.2018
comment
Вот как вы запускаете две команды одновременно. После & не обязательно ставить новую строку, это необязательно. - person John Kugelman; 19.10.2018