终止屏幕时退出 GDB 运行的程序

终止屏幕时退出 GDB 运行的程序

我正在使用 screen 和 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命令检查)。当我的屏幕终止时,有什么方法可以退出它们吗?

编辑:正如 MarkPlotnick 所要求的,我的屏幕是Screen version 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

答案1

正如 MarkPlotnick 的评论所建议的,我添加了-ex quitgdb 命令,它在 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

相关内容