我正在使用 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 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
。