타이머·프로세스 카드 — setInterval/cron/subprocess/child_process 대응 (파동① 웨이브2)
개요
크라우니 RPN 킷 대응카드 시리즈("존재≠동작" 검증) 신규 산출. JS/Node의 타이머(setTimeout/setInterval)·cron·
child_process(exec/spawn)를 한선씨로 어떻게 대응시키는지, 무엇이 진짜 동작하고 무엇이 관용구로만 흉내
가능한지, 무엇이 아예 없는지를 실컴파일+실행으로 실측 고정.
무엇을 했는지
- 인벤토리:
libs/타이머.한선(맵 기반 타이머/스톱워치), libs/프로세스.한선(v1 체계 위임 + v2 네이티브 POSIX
opcode 760~779), 내장 시간 opcode(441~444)·프로세스 opcode(760~779)·체계 opcode(449) 코드 레벨 확인.
- 예제 6종 작성 → 전부 실컴파일+실행 검증 PASS, 매 실행 후
ps -p로 잔류 프로세스 0 확인:
01 시간측정(초 vs ms 정밀도), 02 대기밀리 블로킹+상한함정, 03 체계() stdout 캡처 재검증, 04 spawn/상태폴링/블로킹대기,
05 주기실행 정직 실증(이벤트루프 없음), 06 프로세스킬+회수.
- 검증 게이트
타이머프로세스검증.sh 작성 → 6/6 PASS.
- 카드 문서
타이머프로세스카드.md 작성(대응표 + 함정 8종 + 갭 7종 + 크라우니코드 보고줄).
- 학습DB에 신규 관용구 4건 add.
핵심 발견
- ★재발견:
체계()(opcode 449, SYSTEM)는 현재 v11 정본 바이너리에서 popen() 기반으로 재구현되어
stdout을 직접 캡처한다. 기존 가드레일 문서(
~/.claude/templates/한선씨-가드레일.md)에 남은
"체계()는 stdout 캡처 불가(exit code만) → redirect+읽기() 우회" 트랩은
해소됨(단, 종료코드는 여전히
못 얻음, 8191B 캡 존재). 이 카드가 코드 레벨(
crownyc.c:11675)과 실행 레벨 둘 다로 재확인한 첫 사례.
밀리초()(TIME_MS, opcode442)는 실제 ms 정밀도가 있다(CLOCK_MONOTONIC 기반). 로깅카드가 지적한
"성능타이머 초단위뿐"은 로깅.한선이
현재시간()(초)만 써서 생긴 그 라이브러리 고유 갭이지 VM 한계가 아님.
대기밀리/대기는 VM 내부에 상한 가드(각각 60000ms/3600s)가 있어 벗어나면 에러 없이 조용히 무시된다
(실측: 대기밀리(70000) 요청 시 실제 경과 0ms). 타임아웃 계산 실수 시 치명적 무음 실패 소지.
setInterval/cron급 진짜 비동기 주기 실행은 VM에 없음 — 동기 반복문+대기밀리 관용구만 가능하고,
그동안 프로그램 전체가 완전히 멈춘다(실측: 오차 15ms 수준의 정확한 순차 누적으로 "동시성 없음" 실증).
프로세스띄워(spawn)/프로세스상태(WNOHANG 폴링, 자동 reap)/프로세스대기(블로킹)/프로세스킬(SIGTERM)
조합은 전부 진짜 POSIX fork/exec/waitpid/kill이며 잔류 없이 정상 작동(실측 2건 모두 PASS).
관련 파일
/Users/ef/crowny-rpnkit/라이브러리카드/타이머프로세스카드.md (카드 본문)
/Users/ef/crowny-rpnkit/라이브러리카드/타이머프로세스검증.sh (검증 게이트, 6/6 PASS)
/Users/ef/crowny-rpnkit/라이브러리카드/예제/타이머프로세스/01~06_*.한선 (예제 6종)
/Users/ef/CrownyOS/crownyc/pkg/libs/타이머.한선, /Users/ef/CrownyOS/crownyc/pkg/libs/프로세스.한선 (정본 라이브러리)
/Users/ef/CrownyOS/crownyc/crownyc.c (opcode 441~444, 449, 760~779 구현부)
잔여 이슈
- P1: 진짜 비동기 이벤트루프/
setInterval, 시스템 crontab 등록 API 없음 — 파동②에서 관용구 헬퍼 라이브러리화 검토.
- P2:
체계() 종료코드 미반환(별도 opcode 확장 필요), 커스텀 시그널 핸들러 콜백 미구현(SIG_DFL/IGN만),
대기밀리/
대기 상한 초과 시 무음 실패(경고 추가 권장).
- P3: worker_threads/진짜 백그라운드 데몬 없음(가드레일상 사용 자제 대상), 시그널킬 vs 정상종료 반환코드 구분 불가.