저는 프로그램을 실행하기 위해 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
.
추신: -ex quit
.gdb 명령을 호출하면 이 옵션이 더 이상 필요하지 않습니다 screen ... stuff
.