## 0.1 인터럽트 시그널(SIGINT, SIGTERM) 캡처 기반 점진적 시스템 종료 프로토콜

분산 로보틱스 시스템에 탑재되는 애플리케이션은 예기치 못한 운영체제(OS) 수준의 제어 개입이나, 상위 오케스트레이션 툴(예: ros2 launch, systemd)에 의한 프로세스 조기 종료 명령으로부터 데이터를 보호하고 장비를 안전한 상태로 천이시켜야 할 의무가 있다. ROS2 프레임워크는 이러한 운영 요건을 수용하기 위해, POSIX 표준 환경의 시스템 인터럽트 시그널인 SIGINT(터미널 인터럽트, Ctrl+C)와 SIGTERM(소프트웨어 종료 요청)을 투명하게 캡처(Capture)하여 시스템 루프를 우아하게(Gracefully) 정지시키는 점진적 종료 프로토콜(Progressive Shutdown Protocol)을 기본적으로 내장하고 있다.

0.1.1 전역 시스템 핸들러 바인딩과 rclcpp::ok() 상태 검증

프로세스의 진입점에서 rclcpp::init(argc, argv) 또는 rclpy.init()가 호출되는 순간, 프레임워크는 내부적으로 운영체제의 시그널 벡터 테이블을 가로채어 ROS2 고유의 전역 시그널 핸들러(Global Signal Handler)를 주입한다. 만약 개발자가 자체적인 커스텀 시그널 처리기를 사용하고자 한다면 초기화 옵션 객체(rclcpp::InitOptions)를 통해 자동 캡처를 비활성화(Disable)할 수 있지만, 기본 런타임 환경에서는 이 프레임워크 핸들러가 인터럽트를 선점한다.
이 핸들러의 핵심적인 역할은 프로세스의 즉각적 사멸(Abort)을 지연시키고, 대신 메모리 상에 존재하는 글로벌 컨텍스트(Global Context)의 유효성 검사 반환값을 논리적 거짓(false)으로 마킹(Marking)하는 데에 있다. 즉, rclcpp::ok()rclpy.ok() 함수의 반환값을 제어함으로써 안전한 종료 플래그를 프로세스 전체에 브로드캐스트하는 메커니즘이다.

0.1.2 이벤트 루프(Executor Spin)에 대한 종속적 스루푸트(Throughput) 정지

ROS2의 노드를 제어하는 이그제큐터(Executor)의 무한 체류 함수인 spin() 루틴은, 내부적으로 각 대기(Wait) 주기를 순회할 때마다 조건부 루프 제어문인 while (rclcpp::ok()) 패턴에 종속되어 동작한다.
동작 중인 시스템에 SIGINT가 하달될 경우, 운영체제로부터 시작된 인터럽트 핸들링 루틴에 의해 글로벌 상태가 무효화되면 대기 집합(WaitSet)에서 블로킹(Blocking) 중이던 이그제큐터 내의 스레드들은 다음 실행 주기(Cycle) 시작 시점에 즉시 반복 구문을 탈출하게 된다. 결과적으로 아직 큐에 남아있는 잔여 콜백(Callback)이나 네트워크의 패킷 수신부는 즉각적인 수용 중단 상태로 유도된다.

0.1.3 점진적 종료 체계의 공학적 방어 기제

이러한 운영체제 시그널 기반의 점진적 종료 프로토콜은 갑작스러운 전원 차단이나 SIGKILL(강제 사멸)이 발생하지 않는 한, 구동 중인 노드와 이그제큐터가 할당받은 콜 스택(Call Stack) 상의 지역 변수들 및 파일 입출력 버퍼가 정상적으로 소멸 절차를 밟을 수 있는 최소한의 유예 공간을 제공한다.
이러한 설계 아키텍처는 고위험 기계 장치인 자율 무인 항공기(UAV) 맥락에서 특히 중요하다. 드론의 로터 제어 명령을 비동기로 송출하던 컴포넌트가 갑작스럽게 메모리 상에서 파편화되며 소거되는 현상을 방지하고, 메인 스레드로 제어권을 복귀시킴으로써 개발자가 정의한 종료 콜백 단위(예: 안전 콥터 착륙 절차 실행 혹은 마지막 비행 텔레메트리 덤프)를 실행시킬 수 있는 런타임 무결성의 보호막 역할을 수행한다.