성공한 Task Terminal만 자동으로 닫기
presentation.close를 사용해 성공한 Task의 Terminal은 정리하고, 실패한 Task의 오류 Terminal은 남겨서 바로 진단합니다.
이번 편의 핵심
같은 Task가 종료 코드 7로 실패하면 Terminal이 남고, 복구 뒤 종료 코드 0으로 성공하면 해당 Terminal 인스턴스가 자동으로 닫히는 것을 확인합니다.
짧은 Task를 반복 실행하다 보면 성공 로그까지 Terminal 탭에 쌓이지만, 모든 Terminal을 무조건 닫으면 실패 원문도 사라집니다. close: true는 이 두 상황을 종료 코드로 나누는 설정입니다.
1. 시작하기 전에
난이도: 초급. JSON 파일 하나와 빈 표식 파일 하나만 다룹니다. 다만 Task는 실제 PowerShell 프로세스를 실행하므로, 첫 실행 전에 명령과 작업 폴더를 직접 확인해야 합니다.
준비할 것
- 직접 만든 빈 실습 폴더 — VS Code에서 File > Open Folder...로 열고 Explorer 최상단에 폴더 이름이 보이는지 확인합니다.
- Windows 11과 VS Code Stable 1.133.0 — PowerShell에서
code --version을 실행해 첫 줄이1.133.0인지 확인합니다. - Windows PowerShell — 새 Terminal에서
powershell.exe -NoProfile -Command "$PSVersionTable.PSVersion.ToString()"이 버전을 출력하고 종료 코드 0으로 끝나는지 확인합니다. - 기존
.vscode/tasks.json보호 — 파일이 이미 있으면 이 글의 예제로 덮어쓰지 말고 먼저 복사본을 만듭니다.
적용 환경 2026-08-18 확인 · Windows 11 · VS Code Stable 1.133.0 · Windows PowerShell 5.1 계열
powershell.exe를 실행하고 ready.flag 존재 여부만 읽습니다. 직접 만든 빈 폴더와 이 글의 정확한 명령인지 확인한 뒤에만 Human Gate를 통과해 실행하세요. 기존 파일을 삭제하거나 덮어쓰지 않습니다. 중단 조건: Workspace 출처를 모르거나, tasks.json에 이해하지 못한 명령이 있거나, ready.flag가 이미 있는데 용도를 모르면 실행하지 않습니다.2. 알아둘 핵심 개념
presentation.close
FACT. Task의 presentation 안에 넣는 Boolean입니다. 기본값은 false입니다. true이면 Task가 성공적으로 끝난 Terminal을 닫지만, Stable 1.133.0 구현 설명에 따라 프로세스가 0이 아닌 종료 코드로 끝나면 Terminal을 닫지 않습니다. 문자열 "true"가 아니라 JSON Boolean true를 써야 합니다.
종료 코드
FACT. 이 실습에서 종료 코드 0은 성공, 7은 의도적으로 만든 실패입니다. 실제 도구마다 실패 코드의 숫자와 뜻은 다를 수 있으므로, 숫자 7 자체를 일반 규칙으로 해석하지 않습니다.
Terminal 인스턴스와 Terminal 패널
RECOMMENDATION. 완료 여부는 아래쪽 패널 전체가 보이는지만으로 판단하지 말고 오른쪽 Terminal 탭 목록에서 이번 Task의 인스턴스가 사라졌는지로 확인합니다. 다른 Terminal이 열려 있으면 패널은 계속 보일 수 있습니다.
Tasks: Rerun Last Task
PROCEDURE. 직전에 실행한 Task를 다시 선택하지 않고 재실행하는 Command Palette 명령입니다. 실패 원인을 고친 뒤 같은 Task가 성공 경로로 바뀌는지 비교할 때 사용합니다.
3. 순서대로 진행하기
각 단계의 정상 결과를 확인한 뒤 다음 단계로 이동합니다. <실습폴더>는 예를 들어 C:\Users\<사용자이름>\Documents\vscode-task-close-lab처럼 직접 만든 빈 폴더로 바꿉니다.
1. 빈 실습 폴더를 Workspace로 열기
목적 기존 프로젝트 파일과 실습 산출물이 섞이지 않게 범위를 고정합니다.
- VS Code에서 File > Open Folder...를 선택하고 직접 만든
<실습폴더>를 엽니다. Workspace Trust 안내가 나오면 본인이 만든 빈 폴더인지 다시 확인한 뒤에만 신뢰합니다.
입력 위치 VS Code 상단 File 메뉴와 폴더 선택 창
<실습폴더>
└─ 아직 파일 없음
정상 결과 Explorer 최상단에 실습 폴더 하나가 표시됩니다.
확인 Terminal > New Terminal을 열고 Get-Location을 실행해 마지막 경로가 <실습폴더>인지 확인합니다.
실패 신호 Explorer에 폴더가 없거나 Terminal 경로가 다른 프로젝트입니다.
2. 기존 tasks.json을 먼저 보호하기
목적 사용 중인 Task 설정을 덮어쓰지 않습니다.
- 방금 연 Integrated Terminal에서 아래 읽기 전용 명령을 실행합니다.
입력 위치 VS Code Integrated Terminal · Shell: PowerShell · 실행 위치: <실습폴더>
Test-Path -LiteralPath '.\.vscode\tasks.json'
정상 결과 새 빈 폴더라면 False가 출력됩니다.
확인 False 원문을 그대로 확인합니다.
실패 신호 True가 나오거나 접근 오류가 발생합니다.
True인데 파일의 용도를 모르면 중단합니다. 되돌리기: 파일을 삭제하지 말고, 새 빈 실습 폴더를 만들어 S01부터 다시 시작합니다.3. 성공과 실패를 나누는 Task 작성하기
목적 같은 Task에서 ready.flag가 없을 때는 종료 7, 있을 때는 종료 0을 반환하게 합니다.
- Explorer에서
.vscode폴더와 그 안의tasks.json파일을 새로 만든 뒤 아래 전체 내용을 저장합니다.
입력 위치 <실습폴더>\.vscode\tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "Demo: close terminal on success",
"type": "process",
"command": "powershell.exe",
"args": [
"-NoLogo",
"-NoProfile",
"-Command",
"if (Test-Path -LiteralPath 'ready.flag') { Write-Output 'TASK_SUCCESS: ready.flag found'; exit 0 } else { [Console]::Error.WriteLine('TASK_FAILED: ready.flag missing'); exit 7 }"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [],
"presentation": {
"reveal": "always",
"panel": "new",
"close": true
}
}
]
}
정상 결과 VS Code가 JSON 오류 표시 없이 파일을 저장합니다.
확인 close에 따옴표가 없고, options.cwd가 ${workspaceFolder}인지 확인합니다.
실패 신호 빨간 물결선, Incorrect type, 쉼표 오류 또는 저장되지 않음 표시가 남습니다.
ready.flag 읽기와 메시지 출력만 하는지 확인하는 Human Gate입니다. 되돌리기: 방금 새로 만든 실습 파일만 닫고, 입력 전 백업이 있었다면 원본을 복원합니다. JSON 오류를 고친 뒤 S04로 재합류합니다.4. JSON 자료형과 실행 조건 검증하기
목적 Task 실행 전에 설정 Key, 자료형과 표식 파일 부재를 독립적으로 확인합니다.
- 새 PowerShell Terminal에서 아래 명령을 순서대로 실행합니다.
입력 위치 VS Code Integrated Terminal · Shell: PowerShell · 실행 위치: <실습폴더>
$config = Get-Content -Raw -LiteralPath '.\.vscode\tasks.json' | ConvertFrom-Json
$config.tasks[0].presentation.close -eq $true
$config.tasks[0].presentation.close.GetType().Name
Test-Path -LiteralPath '.\ready.flag'
정상 결과 차례로True,Boolean,False가 출력됩니다.
확인 세 출력값을 그대로 비교합니다. False는 첫 실행을 실패 경로로 만들기 위한 조건입니다.
실패 신호 JSON 파싱 오류, String, 또는 마지막 값 True입니다.
ready.flag의 용도를 모르면 삭제하지 않습니다. 되돌리기: JSON은 S03 원문과 비교하고, 표식 파일이 이미 있으면 새 빈 실습 폴더로 돌아가 S01부터 재합류합니다.5. 실패 경로를 한 번 실행하기
목적 0이 아닌 종료 코드에서는 close: true여도 오류 Terminal이 남는지 확인합니다.
- Human Gate: S04 결과가 정확한지 확인한 뒤 Ctrl+Shift+P를 누르고 Tasks: Run Task를 실행해 Demo: close terminal on success를 선택합니다.
입력 위치 Command Palette와 Task 선택 목록
TASK_FAILED: ready.flag missing
exit code: 7
정상 결과 오류 원문 TASK_FAILED: ready.flag missing가 표시되고 Task가 종료 코드 7로 끝나며, 해당 Task Terminal 인스턴스가 남습니다.
확인 Terminal 탭 목록에서 Task 이름의 Terminal이 남아 있고 오류 원문을 다시 읽을 수 있는지 확인합니다.
실패 신호 성공 메시지가 나오거나, 종료 코드가 0이거나, Terminal이 즉시 사라집니다.
6. 남은 Terminal에서 실패 증거 확인하기
목적 자동 닫힘이 실패 진단 자료를 지우지 않았음을 확인합니다.
- Task Terminal을 닫거나 아무 키도 누르지 말고, 오류 문장과 종료 코드 7을 메모합니다.
입력 위치 Integrated Terminal의 방금 실패한 Task 탭
관찰 1: TASK_FAILED: ready.flag missing
관찰 2: 종료 코드 7
관찰 3: Task Terminal 탭이 남아 있음
정상 결과 세 관찰을 모두 같은 실행에서 확인할 수 있습니다.
확인 오류 문장을 임의로 줄이거나 번역하지 않고 원문 그대로 비교합니다.
실패 신호 어느 실행의 출력인지 구분할 수 없거나 Terminal을 이미 닫았습니다.
tasks.json을 보존한 채 중단해도 됩니다. 되돌리기: 증거가 사라졌다면 ready.flag가 없는지 확인하고 S05를 다시 실행해 S06으로 재합류합니다.7. 표식 파일을 만든 뒤 마지막 Task 재실행하기
목적 같은 Task를 종료 코드 0의 성공 경로로 바꿔 자동 닫힘을 확인합니다.
- Terminal > New Terminal에서 아래 명령으로 새 빈 파일을 만든 뒤, Command Palette에서 Tasks: Rerun Last Task를 실행합니다.
입력 위치 새 PowerShell Terminal과 Command Palette · 실행 위치: <실습폴더>
if (Test-Path -LiteralPath '.\ready.flag') {
throw 'STOP: ready.flag already exists'
} else {
New-Item -ItemType File -Path '.\ready.flag'
}
정상 결과 재실행한 Task가 TASK_SUCCESS: ready.flag found를 출력하고 종료 코드 0으로 끝난 뒤, 그 Task Terminal 인스턴스가 자동으로 닫힙니다.
확인 새로 만든 일반 PowerShell Terminal은 남아 있어도 됩니다. Terminal 탭 목록에서 재실행한 Task의 Terminal만 사라졌는지 확인합니다.
실패 신호 다시 실패하거나, 성공 메시지 뒤에도 Task Terminal이 남거나, 다른 Task가 실행됩니다.
ready.flag가 이미 있으면 덮어쓰지 않고 중단합니다. 되돌리기: 마지막 Task가 달랐다면 S05의 Task를 다시 한 번 선택 실행하고, 표식 상태를 확인한 뒤 S07의 재실행 지점으로 돌아옵니다.8. 완료 조건 확인하고 실습 파일 정리하기
목적 UI 관찰과 파일 상태를 교차 확인하고 선택적으로 원상 복구합니다.
- 아래 읽기 전용 검증을 실행합니다. 실습을 끝낼 때만 Human Gate를 거쳐
ready.flag와 새로 만든 실습 폴더를 삭제합니다.
입력 위치 남아 있는 일반 PowerShell Terminal · 실행 위치: <실습폴더>
$config = Get-Content -Raw -LiteralPath '.\.vscode\tasks.json' | ConvertFrom-Json
[pscustomobject]@{
Label = $config.tasks[0].label
Close = $config.tasks[0].presentation.close
CloseType = $config.tasks[0].presentation.close.GetType().Name
Ready = Test-Path -LiteralPath '.\ready.flag'
}
정상 결과Label은Demo: close terminal on success,Close는True,CloseType은Boolean,Ready는True입니다.
확인 실패 실행에서는 Terminal 보존, 복구 재실행에서는 Task Terminal 자동 닫힘이라는 두 관찰과 위 네 값을 함께 확인합니다.
실패 신호 값이 다르거나 어느 Task Terminal이 닫혔는지 구분할 수 없습니다.
ready.flag만 Remove-Item -LiteralPath '.\ready.flag'로 삭제하고, tasks.json 백업이 있었다면 백업을 복원합니다. 완료 조건을 다시 확인하려면 S04로 재합류합니다.4. 완료 확인하기
입력 화면과 독립된 파일 검증, 실패 원문, Terminal 탭 상태를 함께 확인합니다.
tasks.json파싱 —presentation.close가 값True, 자료형Boolean으로 확인됩니다.- 실패 패스 —
ready.flag가 없을 때 정확한 오류 원문과 종료 코드 7을 남기고 Task Terminal이 보존됩니다. - 복구 패스 —
ready.flag를 만든 뒤 Tasks: Rerun Last Task에서 성공 문구와 종료 코드 0을 내고 해당 Task Terminal이 닫힙니다. - 범위 확인 — 자동으로 닫히는 대상은 성공한 Task의 Terminal 인스턴스이며, 다른 일반 Terminal이나 패널 전체가 반드시 닫히는 것은 완료 조건이 아닙니다.
완료 기준 동일한 Task에서 실패 Terminal 보존과 성공 Terminal 자동 닫힘을 모두 관찰하고,close가 Booleantrue임을 독립적으로 확인하면 완료입니다.
5. 문제가 생겼다면
Tasks: Run Task가 보이지 않습니다
먼저 확인 단일 파일만 연 상태인지, Explorer 최상단에 Workspace 폴더가 있는지 확인합니다.
복구 File > Open Folder...로 실습 폴더를 열고 .vscode/tasks.json을 다시 확인합니다.
재합류 S01
Task가 목록에 없거나 JSON 오류가 납니다
먼저 확인 파일 경로가 정확히 .vscode/tasks.json인지, 쉼표와 중괄호가 S03 예제와 같은지 확인합니다.
복구 ConvertFrom-Json 오류 원문을 보존하고 해당 위치만 수정합니다. 원인을 확인하지 못하면 UNKNOWN으로 두고 중단합니다.
재합류 S04
실패했는데 Terminal이 닫힙니다
먼저 확인 출력에 TASK_FAILED: ready.flag missing가 있는지, 프로세스 종료 코드가 실제로 7인지 확인합니다.
복구 ready.flag가 없는지 확인하고, S03의 else 분기에 exit 7이 그대로 있는지 복원합니다.
재합류 S05
성공했는데 Task Terminal이 남습니다
먼저 확인 close가 문자열이 아닌 Boolean true인지, 성공 출력 뒤 종료 코드가 0인지 확인합니다.
복구 S03의 presentation 블록을 복원하고 presentation.close 기본값은 false임을 기억합니다. 다른 일반 Terminal이 남은 것인지 Task Terminal 탭 이름도 구분합니다.
재합류 S04
Tasks: Rerun Last Task가 다른 Task를 실행합니다
먼저 확인 직전에 실행한 Task 이름이 무엇이었는지 확인합니다.
복구 Tasks: Run Task에서 Demo: close terminal on success를 한 번 선택한 뒤 다시 Tasks: Rerun Last Task를 실행합니다.
재합류 S07
Terminal 패널은 계속 보입니다
먼저 확인 패널 안에 일반 PowerShell Terminal이나 다른 Task Terminal이 남아 있는지 확인합니다.
복구 패널 전체가 아니라 이번 Task의 Terminal 탭이 사라졌는지로 판단합니다. 다른 Terminal은 사용자가 필요할 때 직접 닫습니다.
재합류 S08
tasks.json, ready.flag 존재 여부를 보존하고 임의 변경 없이 중단합니다.6. 핵심 정리와 공식 자료
- FACT:
presentation.close는 Boolean이며 기본값은false입니다. - FACT: Stable 1.133.0 구현 설명은 0이 아닌 종료 코드에서 Terminal을 닫지 않는다고 명시합니다.
- PROCEDURE: 실패 원문과 종료 코드를 남긴 뒤 원인을 복구하고 Tasks: Rerun Last Task로 같은 Task를 다시 검증합니다.
- EXAMPLE: 이 글의 종료 코드 7과
ready.flag는 안전한 비교를 위한 실습용 값이며 일반 규칙이 아닙니다. - UNCONFIRMED: 확장 기능이 제공하는 사용자 정의 Task나 원격 환경은 별도 구현 차이가 있을 수 있어 이 로컬 Windows 실습에서 확인하지 않았습니다.
공식 자료
아래 자료는 2026-08-18 Asia/Seoul에 접근했습니다. Windows x64 User Stable과 로컬 설치본은 1.133.0, commit a5b500951314efd502d07465bd138dfbd714a960으로 일치했습니다. 원격·컨테이너·WSL과 확장 제공 Task는 이 실행의 검증 범위 밖입니다.
- VS Code Stable Update API · Microsoft
- Integrate with External Tools via Tasks — Output behavior · Microsoft
- Tasks Schema Appendix · Microsoft
- VS Code Stable 1.133.0 taskConfiguration.ts · Microsoft
- VS Code Stable 1.133.0 Tasks JSON Schema source · Microsoft
- VS Code 1.57 Release Notes — Automatically close task terminals · Microsoft
- VS Code 1.133 Release Notes source · Microsoft
hide: true, dependsOn, Run Task 목록 가시성과 부모 Task를 통한 실행을 비교합니다.'개발 > Visual Studio Code' 카테고리의 다른 글
| 커맨드 팔레트 21부: VS Code Task 목록에 설명을 붙여 비슷한 명령 구분하기 (0) | 2026.08.20 |
|---|---|
| 커맨드 팔레트 20부: VS Code 내부용 자식 Task를 실행 목록에서 숨기기 (0) | 2026.08.19 |
| 커맨드 팔레트 18부: VS Code 실패한 자식 Task에서 순차 Build 멈추기 (0) | 2026.08.17 |
| 커맨드 팔레트 17부: VS Code 여러 Task를 하나의 Build로 묶기 (0) | 2026.08.16 |
| 커맨드 팔레트 16부: VS Code 기본 Build Task를 한 번에 실행하기 (0) | 2026.08.15 |