터미널 애플리케이션에서 자식 프로세스 종료를 우아하게 처리하기
2025-07-31

Ctrl+C 후 자식 프로세스가 깔끔하게 종료되지 않으면 터미널이 손상될 수 있습니다. 이 글에서는 Moose CLI를 예로 들어 이 문제에 대한 해결책을 설명합니다. 주요 전략은 다음과 같습니다. 1. 프로세스 출력 프록시: 자식 프로세스의 stdout/stderr을 로깅 시스템으로 리다이렉트하여 터미널과 분리합니다. 2. 터미널 상태 관리: crossterm을 사용하여 종료 시 터미널 상태(raw 모드, 대체 화면 버퍼, 커서 표시)를 명시적으로 정리합니다. 3. 우아한 프로세스 종료: SIGTERM으로 종료를 시도하고, 타임아웃과 함께 SIGKILL을 사용합니다. 4. 스레드 안전한 스피너 관리: 스레드 간 경쟁 상태를 피하고, 스피너와 자식 프로세스의 출력을 조정합니다. 이러한 전략을 통해 자식 프로세스로 인한 터미널 손상을 방지하고, 견고한 터미널 애플리케이션을 구축할 수 있습니다.
개발
자식 프로세스