Deno Watch Mode 신호 문제에 대한 업데이트

발행: (2025년 12월 14일 오후 01:34 GMT+9)
2 min read
원문: Dev.to

Source: Dev.to

Deno에는 워치 모드에서 신호 핸들러가 작동하지 않는 이슈가 있습니다. 이는 Deno 파일 감시자가 INT 신호를 워커에 전달하지 않아 워커가 그냥 중단되기 때문이라고 생각합니다. 이제 이 점에 대해 확신합니다.

Deno 내 소스

select! {
    _ = receiver_future => {},
    _ = deno_signals::ctrl_c() => {
        return Ok(()); // this line handled the INT signal and fulfilled select!
    },
    _ = restart_rx.recv() => {
        print_after_restart();
        continue;
    },
    success = operation_future => { /* ... */ }
}

Deno 코드에서 select! 문은 JavaScript의 Promise.any와 같은 역할을 합니다. INT 신호가 무시되는 순간 바로 완료됩니다. operation_future는 사용자의 JavaScript 또는 TypeScript 파일을 실행하지만, 사용자 정의 리스너가 활성화될 기회를 얻지 못합니다.

Node.js가 워치 모드에서 신호를 처리하는 방법

Node.js는 신호를 워커에 전달하고 워커가 종료될 때까지 기다립니다.

async function killAndWait(signal = kKillSignal, force = false) {
  child?.removeAllListeners();
  if (!child) {
    return;
  }
  if ((child.killed || exited) && !force) {
    return;
  }
  const onExit = once(child, 'exit');
  child.kill(signal);
  const { 0: exitCode } = await onExit;
  return exitCode;
}

source

Deno를 위한 제안된 접근 방식

저는 비슷한 전략을 채택하려고 합니다: 신호를 워커에 전달해 리스너를 트리거하고, 그 워커가 작업을 마칠 때까지 기다리는 것입니다. 이렇게 하면 워치 모드에서도 사용자 정의 신호 핸들러가 올바르게 실행될 수 있을 것입니다.

Back to Blog

관련 글

더 보기 »

고성능 GPGPU와 Rust 및 wgpu

컴퓨트 애플리케이션의 아키텍처 GPGPU 애플리케이션은 전통적인 렌더링 루프와 크게 다릅니다. 그래픽 컨텍스트에서 파이프라인은 c...