I Я запускаю свою программу, используя экран и GDB.
Как я запускаю свою программу:
screen -dmS adapter "./run-adapter.sh"
В run-adapter.sh
gdb -ex "handle SIGPIPE nostop noprint pass" -ex run -args ./Adapter adapter.conf
Проблема в том, когда я пытаюсь выйти из своей программы с помощью экрана:
screen -X -S adapter quit
Экран завершается нормально, но программа и ее GDB не работают. все еще остается (проверено командой ps aux
). Есть ли способы выйти из них, когда мой экран отключен?
Отредактировано: Как и просил МаркПлотник, мой экран имеет вид Версия экрана 4.00.03d (FAU) 23-Oct-06
, а GDB - GNU gdb (GDB) 7.7
.
Вывод grep Sig / proc / $ (pgrep Adapter) / status
:
SigPnd: 0000000000040000
SigBlk: 0000000000000000
SigIgn: 0000000001001000
SigCgt: 0000000180000620
Как было предложено в комментарии MarkPlotnick, я добавляю -ex quit
в команду gdb, и это работает в OpenSUSE 13.1. Полная команда выполнения:
gdb -ex "handle SIGPIPE nostop noprint pass" -ex run -ex quit -args./Adapter adapter.conf
И чтобы выйти из экрана с автоматическим выходом gdb, я использую:
screen -X -S adapter quit
К сожалению, те же самые команды не работали, когда я обновлял ОС до OpenSUSE 42.2. После небольшого расследования теперь я могу выйти с помощью:
screen -X -S adapter stuff "^C"
screen -X -S adapter quit
Команда stuff
отправит сигнал Ctrl -C (SIGINT )для завершения процесса adapter
. После этого мы можем нормально выйти, позвонив screen... quit
.
PS :Опция -ex quit
в команде gdb больше не нужна, если мы вызываем screen... stuff
.