File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -81,12 +81,33 @@ def self.start
8181 puts "[gRPC] Successfully bound to 0.0.0.0:#{ grpc_port } "
8282 puts "[gRPC] Waiting for incoming requests..."
8383
84- # 종료 시그널 핸들링 (서버 안정 종료)
85- trap ( 'INT' ) { server . stop }
86- trap ( 'TERM' ) { server . stop }
84+ # =====================================================
85+ # 종료 시그널 안전 처리 (Thread-safe)
86+ # =====================================================
87+ stop_requested = false
88+ trap ( 'INT' ) { stop_requested = true }
89+ trap ( 'TERM' ) { stop_requested = true }
90+
91+ # gRPC 서버 실행을 별도 스레드에서 수행
92+ server_thread = Thread . new do
93+ begin
94+ server . run_till_terminated
95+ rescue => e
96+ STDERR . puts "[gRPC] Server thread error: #{ e . class } - #{ e . message } "
97+ STDERR . puts e . backtrace . join ( "\n " )
98+ end
99+ end
100+
101+ # 종료 감시 루프
102+ until stop_requested
103+ sleep 1
104+ end
105+
106+ puts "[gRPC] Stopping server gracefully..."
107+ server . stop
108+ server_thread . join
109+ puts "[gRPC] Server stopped cleanly."
87110
88- # 서버 실행
89- server . run_till_terminated
90111 rescue => e
91112 STDERR . puts "[gRPC] Fatal error: #{ e . class } - #{ e . message } "
92113 STDERR . puts e . backtrace . join ( "\n " )
You can’t perform that action at this time.
0 commit comments