NVM-Desktop 환경에서 VSCode 실행 시 잔류 CMD 창 문제 진단 및 해결

Windows에서 NVM-Desktop으로 Node.js 버전을 전환한 후 code 명령으로 Visual Studio Code를 여는 경우, 부모 cmd.exe 창이 종료되지 않고 계속 표시되는 경우가 있다. 이 현상은 code.cmd 래퍼가 code.exe를 새로운 콘솔 세션으로 실행하면서 부모-자식 프로세스 간 분리가 제대로 이루어지지 않아 발생한다.

문제 증상

일반적으로 VSCode를 실행하면 명령 프롬프트는 곧바로 닫히고 IDE만 남아야 한다. 하지만 일부 시스템에서는 첫 번째 cmd 창이 백그라운드에 아 있으며, 이후 실행되는 창은 정상적으로 종료된다. 이는 프로세스 트리 관리 방식에 따른 비결정적 동작으로 보인다.

원인 분석

VSCode 설치 시 생성되는 code.cmdcode.exe를 실행하기 위한 중간 스크립트이다. 이 스크립트는 START 명령이나 call 방식에 따라 자식 프로세스의 콘솔 핸들을 상속받게 되며, Windows 솔 호스트(conhost.exe)는 자식이 분리되었는지 판단하지 못해 부모 셸을 계속 유지하게 된다.

특히 NVM-Desktop은 Node.js 바이너리 경로를 동적으로 변경하므로, PATH 해석 순서가 바뀌면서 code.cmd의 실제 경로가 예상과 다르게 매핑될 수 있다.

해결 방안

1. 직접 실행 파일 호출

래퍼 스크립트 대신 실행 파일을 직접 호출한다.

set VSCODE_BIN=%LocalAppData%\Programs\Microsoft VS Code\bin\code.cmd
start "" "%LocalAppData%\Programs\Microsoft VS Code\Code.exe" %*

2. 환경 변수 우선순위 정리

NVM-Desktop이 전환한 Node.js 경로와 VSCode 경로가 PATH에서 올바른 순서로 배치되도록 확인한다. PowerShell에서 다음과 같이 검사할 수 있다.

$env:PATH -split ";" | Select-String -Pattern "VS Code|nodejs|nvm"

3. VSCode 내부 터미널 설정

settings.json에서 콘솔 호스트 및 셸 통합 옵션을 명시적으로 설정한다.

{
  "terminal.integrated.windowsEnableConpty": true,
  "terminal.integrated.shellIntegration.enabled": true,
  "terminal.integrated.defaultProfile.windows": "PowerShell"
}

기술적 배경

Windows에서 콘솔 창은 프로세스가 아닌 솔 세션 단위로 관리된다. code.cmdcode.exe를 실행하면 CREATE_NEW_CONSOLE 래그가 누락된 경우, 자식 프로세스가 부모의 콘솔 핸들을 공유하게 되어 부모 cmd.exe가 종료 조건을 만족하지 못한다. 직 Code.exe를 호출하거나 start 명령으로 분리하면 Windows는 자식을 독립적인 그래픽 프로세스로 인식해 콘솔 을 즉시 해제한다.

권장 설정

개발 워크플로우를 정리하기 위해 다음과 같은 습관을 권장한다.

  • VSCode 실행용 배치 파일이나 PowerShell 함수를 만들어 경로를 축약한다.
  • NVM-Desktop 전환 후 where code 명령으로 실제 매 경로를 확인한다.
  • Windows Terminal이나 PowerShell 7을 기본 터미널로 사용해 레거시 conhost 의존성을 줄인다.

태그: NVM-Desktop vscode Windows CMD conhost

8월 1일 01:54에 게시됨