# 039 — 유휴 HTTP 호스트의 주기적 깨움 제거 후속 [041](041-posix-idle-signal-wakeup.md)에서 Linux 전용 `ppoll` 경로를 POSIX 신호 알림 파이프로 교체했다. 아래 수치와 묶음은 그 전 단계의 기록이다. 2026-09-24. [038](038-fixed-http-document-host.md)의 문서 HTTP 호스트는 연결이 없어도 `poll(..., 50)`을 반복했다. 마이크로 런타임에서는 상시 실행 서비스의 유휴 CPU 깨움도 비용이다. 이번 변경은 사용 중인 연결들의 가장 이른 절대 기한까지 기다리고, 연결이 없으면 새 접속이나 종료 신호가 올 때까지 블로킹한다. 전용 타이머 스레드, 실행 코어 타입, 추가 큐를 만들지 않았다. 종료 신호가 대기 직전에 도착하는 경합을 막기 위해 Linux 호스트는 `SIGINT`·`SIGTERM`을 평소에 보류하고 `ppoll`이 대기할 때 원자적으로 해제한다. 신호는 대기를 깨우며, 다음 루프에서 종료 상태를 확인한다. [시스템 호출 비교](../../prototypes/connections/results/2026-09-24-signal-safe-idle/reproducible-comparison.json)는 같은 Linux AArch64 호스트에서 연결 없는 1.25초를 관찰했다. 보관된 [이전 고정 HTTP 묶음](../../prototypes/connections/results/2026-09-24-fixed-http/pure-document-fixed-http-linux-aarch64.tar.gz)의 호스트는 **50ms 제한의 `ppoll` 25회**, 새 호스트는 **제한 시간 없는 대기 1회**였다. 비교기는 보관된 패키지의 실행물을 직접 추출해 추적하므로 임시 빌드나 기억에 의존하지 않는다. 이는 시스템 호출·깨움 횟수에 대한 실측이며 배터리 소모량이나 처리량 비교는 아니다. 활성 연결이 있으면 각 연결의 절대 기한 중 가장 가까운 값으로 대기 시간을 정한다. 이미 지난 기한은 즉시 처리한다. 기존 소스 정의 HTTP 검사 `make check-release`는 1.2초 기한의 느린 수신자·여덟 개 불완전한 헤더 연결을 회수하는 경로를 포함해 통과했다. [고정 정의 HTTP 회귀 검사](../../prototypes/connections/results/2026-09-24-signal-safe-idle/fixed-server-regression.json)도 1 MiB 문서 교차 송수신, 느린 수신자의 예산 점유·회수와 4 MiB 프로세스 피크 상한을 통과했다. 유휴 블로킹 중 `SIGTERM`이 대기를 깨우고 정상 종료하는 것도 비교 추적에서 확인했다. 링크된 `text`는 소스 HTTP 43,009→**43,451 B**, 고정 HTTP 25,228→**25,790 B**로 증가했다. 앞선 대기 변경만으로는 각각 64 B가 늘었지만, 종료 신호 경합까지 막은 최종 비용은 각각 442 B와 562 B다. 실행 코어 5,932 B와 기본 CLI는 그대로다. [소스 호스트 크기](../../prototypes/connections/results/2026-09-24-signal-safe-idle/source-profile.json)와 [고정 호스트 크기](../../prototypes/connections/results/2026-09-24-signal-safe-idle/fixed-profile.json)는 각각 기존 상한을 통과했다. [새 CLI+HTTP 묶음](../../prototypes/connections/results/2026-09-24-signal-safe-idle/pure-document-fixed-http-linux-aarch64.tar.gz)은 32,023 B이고 [다른 위치에서의 편집·복원](../../prototypes/connections/results/2026-09-24-signal-safe-idle/package.json)을 통과했다. 패키지에는 시스템 libc가 포함되지 않는다. 이 결과는 **Linux 호스트의 유휴 폴링 제거**다. `ppoll` 신호 마스크는 Linux 구현이므로 다른 플랫폼의 대기·종료 경로, 실제 전력, 높은 동시성의 지연·처리량과 큰 앱 표현은 아직 검증하지 않았다. 서비스가 연결을 처리할 때 저장 효과는 여전히 동기식이므로 이 변경으로 그것이 비동기가 되지는 않는다. 재현 명령은 `python3 prototypes/connections/check_idle_wakes.py --before prototypes/connections/results/2026-09-24-fixed-http/pure-document-fixed-http-linux-aarch64.tar.gz --after prototypes/connections/build/pure-connections-fixed`, `make -C prototypes/connections check-release check-fixed-profile check-fixed-server`다.