실행 중인 여러 Task를 한 번에 다시 시작하기
두 개의 독립 Task를 실행한 뒤 Tasks: Rerun All Running Tasks 한 번으로 모두 새 실행으로 교체하고, 각 Terminal의 새 RUN_ID로 결과를 확인합니다.
이번 편의 핵심
Alpha와 Beta의 RUN_ID가 모두 바뀌고, 실습 종료 뒤 실행 중 Task가 0개면 완료입니다.
개발 서버와 감시기를 여러 개 쓸 때 하나씩 재시작하면 일부를 놓치기 쉽습니다. 이 명령은 현재 실행 중인 Task만 한 번에 다시 시작합니다.
1. 시작하기 전에
난이도는 초급입니다. 다만 Task 재시작은 실행 중 프로세스를 중단하므로, 실제 서버나 배포 Task 대신 이 글의 로컬 데모 두 개로 먼저 확인합니다.
준비할 것
- Windows 11에서 VS Code Stable로 빈 폴더를 열기 — 확인: Explorer에 폴더명이 보이고 Terminal > Run Task를 사용할 수 있습니다.
- PowerShell 실행 가능 상태 — 확인: 새 Terminal에서
$PSVersionTable.PSVersion이 버전을 출력합니다. - 기존
.vscode/tasks.json백업 — 확인: 원본과 복사본을 Compare해 차이가 없습니다.
적용 환경 2026-09-05 KST · Windows 11 · VS Code Stable 1.136.1 · PowerShell
2. 알아둘 핵심 개념
실행 중 Task
VS Code Task 시스템이 아직 완료되지 않은 것으로 추적하는 Task입니다. Terminal 탭이 열려 있다는 사실만으로 실행 중인 것은 아니며 Tasks: Show Running Tasks 목록으로 확인합니다.
Rerun All과 Restart Running Task
Rerun All Running Tasks는 활성 목록 전체를 대상으로 합니다. Restart Running Task는 실행 중인 하나를 고르는 명령입니다. 이번에는 두 Task의 RUN_ID가 모두 바뀌어야 성공입니다.
종료 후 재실행
현재 프로세스를 복제하는 것이 아니라 먼저 종료하고 다시 실행합니다. 메모리 상태나 연결은 보존되지 않습니다. 공식 구현은 각 활성 Task의 재시작을 시작하고 모든 결과를 함께 기다립니다.
독립 Task 두 개
Compound Task 하나는 여러 하위 작업을 시작해도 활성 목록에서 하나의 상위 Task로 보일 수 있습니다. 이번 실습은 다중 대상을 명확히 보려고 Alpha와 Beta를 각각 실행합니다.
3. 순서대로 진행하기
각 단계의 정상 결과를 확인한 뒤 다음 단계로 이동합니다.
1. 보호 대상과 중단 조건 확인
목적 실제 업무 Task를 실수로 중단하지 않도록 실습 범위를 격리합니다.
- Ctrl+Shift+P를 누르고 Tasks: Show Running Tasks를 실행합니다.
입력 위치 빈 실습 폴더를 연 VS Code 명령 팔레트.
확인 대상: 실행 중 Task 이름과 개수
권장 시작 상태: 0개
정상 결과 실행 중 Task가 없거나, 사용자가 목적을 아는 항목만 보입니다.
확인 배포·데이터 처리·서버·감시기처럼 중단하면 안 되는 항목이 없는지 이름별로 봅니다.
실패 신호 예상하지 못한 Task가 한 개라도 보입니다.
2. 기존 tasks.json 백업
목적 실습 뒤 원래 Workspace Task 구성을 복원할 수 있게 합니다.
.vscode/tasks.json이 있으면 Workspace 밖의 사용자가 아는 위치에 복사하고 원본과 비교합니다.
입력 위치 VS Code Explorer와 Windows 파일 탐색기.
보호 대상: .vscode/tasks.json
비교: Select for Compare → Compare with Selected
정상 결과 원본과 백업의 내용 차이가 0개입니다.
확인 비교 Editor가 변경 줄을 표시하지 않는지 확인합니다.
실패 신호 백업 위치를 찾을 수 없거나 두 파일이 다릅니다.
3. 두 데모 Task 추가
목적 파일이나 네트워크를 바꾸지 않고 2분 동안 실행되는 독립 Task 두 개를 만듭니다.
- 새 파일이면 아래 JSON 전체를 저장하고, 기존 파일이면
tasks배열에 두 객체만 병합합니다.
입력 위치 실습 Workspace의 .vscode/tasks.json. 두 설정 모두 process 형식이며 Workspace 범위입니다.
{
"version": "2.0.0",
"tasks": [
{
"label": "JCOS Batch Alpha",
"type": "process",
"command": "powershell.exe",
"args": ["-NoProfile", "-Command", "$id=[guid]::NewGuid().ToString('N').Substring(0,8); Write-Output ('BATCH_ALPHA START RUN_ID=' + $id); 1..60 | ForEach-Object { Start-Sleep -Seconds 2; Write-Output ('BATCH_ALPHA HEARTBEAT=' + $_) }"],
"problemMatcher": [],
"presentation": {"reveal":"always","focus":false,"panel":"dedicated","group":"jcos-batch-rerun","clear":true,"showReuseMessage":false}
},
{
"label": "JCOS Batch Beta",
"type": "process",
"command": "powershell.exe",
"args": ["-NoProfile", "-Command", "$id=[guid]::NewGuid().ToString('N').Substring(0,8); Write-Output ('BATCH_BETA START RUN_ID=' + $id); 1..60 | ForEach-Object { Start-Sleep -Seconds 2; Write-Output ('BATCH_BETA HEARTBEAT=' + $_) }"],
"problemMatcher": [],
"presentation": {"reveal":"always","focus":false,"panel":"dedicated","group":"jcos-batch-rerun","clear":true,"showReuseMessage":false}
}
]
}
정상 결과 JSON 오류가 없고 두 label이 정확히 한 번씩 있습니다.
확인 Problems 패널과 저장된 파일에서 label, panel: dedicated, 같은 group, clear: true를 확인합니다.
실패 신호 Incorrect type, End of file expected, 중복 label 또는 빨간 밑줄이 보입니다.
<8자리>는 실제 플레이스홀더가 아니라 실행 시 자동 생성되는 값입니다. 되돌리기: 오류 원문을 보존하고 Undo하거나 백업을 복원한 뒤 Step 3으로 돌아옵니다.4. Alpha Task 실행
목적 첫 번째 일괄 재실행 대상을 활성 상태로 만듭니다.
- Tasks: Run Task를 열어 JCOS Batch Alpha를 선택합니다.
입력 위치 명령 팔레트와 Terminal 패널.
BATCH_ALPHA START RUN_ID=<8자리>
BATCH_ALPHA HEARTBEAT=1
정상 결과 Alpha 전용 Terminal에서 heartbeat 숫자가 2초마다 증가합니다.
확인 첫 Alpha RUN_ID를 메모합니다. 이 값은 사용자가 치환할 필요가 없습니다.
실패 신호 powershell.exe를 찾지 못하거나 첫 출력 뒤 바로 종료됩니다.
5. Beta Task 실행
목적 두 번째 독립 대상을 동시에 활성화합니다.
- Alpha heartbeat가 계속될 때 Tasks: Run Task에서 JCOS Batch Beta를 선택합니다.
입력 위치 명령 팔레트와 Terminal 패널.
BATCH_BETA START RUN_ID=<8자리>
BATCH_BETA HEARTBEAT=1
정상 결과 같은 Terminal 그룹에서 Alpha와 Beta가 분리되어 둘 다 실행됩니다.
확인 첫 Beta RUN_ID를 메모하고 Alpha heartbeat도 계속 증가하는지 봅니다.
실패 신호 Alpha가 끝났거나 Beta가 Alpha 출력과 같은 Terminal을 공유합니다.
6. 실제 대상 두 개 확인
목적 일괄 명령이 중단할 정확한 범위를 Human Gate에서 확인합니다.
- Tasks: Show Running Tasks를 실행하고 목록을 읽습니다.
입력 위치 명령 팔레트.
JCOS Batch Alpha
JCOS Batch Beta
정상 결과 위 두 항목이 모두 보이고 예상하지 못한 실제 업무 Task는 없습니다.
확인 이름과 개수를 하나씩 대조합니다.
실패 신호 한 항목만 보이거나 중단하면 안 되는 Task가 함께 보입니다.
7. 모두 한 번에 재실행
목적 현재 실행 중인 두 Task를 한 번의 명령으로 새 실행으로 교체합니다.
- Tasks: Rerun All Running Tasks를 선택합니다. 기본 단축키를 가정하지 않습니다.
입력 위치 Ctrl+Shift+P 명령 팔레트.
BATCH_ALPHA START RUN_ID=<새 8자리>
BATCH_BETA START RUN_ID=<새 8자리>
정상 결과 두 Terminal이 정리되고 heartbeat가 1부터 다시 시작하며 두 RUN_ID가 각각 바뀝니다.
확인 Alpha 전후 ID와 Beta 전후 ID를 각각 비교합니다.
실패 신호 No running tasks to restart, Failed to terminate and restart task, 또는 한 RUN_ID만 변경됩니다.
8. 종료하고 원래 상태로 복원
목적 데모 프로세스를 남기지 않고 Workspace 구성을 되돌립니다.
- Tasks: Terminate Task → All Running Tasks를 선택하고 tasks.json 백업을 복원합니다.
입력 위치 명령 팔레트, Terminal 패널, Explorer.
최종 실행 중 Task: 0개
tasks.json: 백업과 동일
정상 결과 heartbeat가 멈추고 실행 중 Task가 없으며 원래 Task 정의가 보존됩니다.
확인 Show Running Tasks와 파일 Compare를 함께 사용합니다.
실패 신호 heartbeat가 계속되거나 기존 Task 정의가 사라집니다.
4. 완료 확인하기
입력 화면과 독립된 방법을 포함해 결과를 교차 확인합니다.
- Tasks: Show Running Tasks — 재실행 전 Alpha·Beta 2개, 종료 후 0개입니다.
- 각 전용 Terminal의 RUN_ID 비교 — Alpha와 Beta 모두 전후 값이 다릅니다.
tasks.json파일 비교 — 실습 전 보호 대상과 최종 파일 사이에 의도하지 않은 차이가 없습니다.
완료 기준 한 번의 Rerun All Running Tasks로 두 Task가 새 ID로 교체되고, 종료·복원 뒤 보호 대상에 차이가 없습니다.
5. 문제가 생겼다면
No running tasks to restart
먼저 확인 Show Running Tasks의 항목 수를 봅니다. Terminal 탭 존재만으로 실행 중이라고 판단하지 않습니다.
복구 Step 4와 5에서 두 Task를 다시 실행하고 heartbeat가 증가할 때 Step 6으로 돌아옵니다.
재합류 VSC-032-S06
Failed to terminate and restart task
먼저 확인 알림의 정확한 Task 이름과 Terminal의 마지막 출력을 보존합니다. 권한이나 자식 프로세스 문제라고 근거 없이 단정하지 않습니다.
복구 Terminate Task에서 해당 항목만 종료하고 종료 여부를 확인한 뒤 다시 실행합니다.
재합류 VSC-032-S04 또는 VSC-032-S05
한 Task만 새 RUN_ID를 받음
먼저 확인 명령 실행 직전 두 항목이 실제 Running 목록에 있었는지 확인합니다.
복구 실행 중인 데모를 종료하고 Step 4부터 다시 진행합니다. 재현되면 원인 UNKNOWN으로 기록합니다.
재합류 VSC-032-S04
JSON을 바꿨는데 예전 동작이 보임
먼저 확인 저장 상태, Problems 오류, 현재 Workspace의 실제 tasks.json 경로를 확인합니다.
복구 파일을 저장하고 두 데모 Task를 종료한 뒤 다시 시작합니다. 잘못된 파일을 편집했다면 백업을 복원합니다.
재합류 VSC-032-S03
6. 핵심 정리와 공식 자료
- Rerun All Running Tasks는 현재 활성 Task 전체를 종료 후 다시 실행합니다.
- 이미 끝난 Task는 대상이 아니며, 실행 전 Show Running Tasks가 핵심 Human Gate입니다.
- Alpha와 Beta의 RUN_ID가 모두 바뀌어야 일괄 재실행을 확인할 수 있습니다.
- 실제 업무 Task에서는 중단 영향, 종료 fallback, tasks.json 백업을 먼저 준비합니다.
공식 자료
아래 자료는 2026-09-05 KST에 확인했습니다. Stable API와 로컬 버전은 Windows x64 User Stable 1.136.1에 적용되며, 소스 링크는 동일 commit에 고정했습니다. 실제 로컬 UI 관찰은 독자 Human Gate입니다.
- VS Code Stable Update API · Microsoft
- Integrate with External Tools via Tasks · Microsoft
- Visual Studio Code June 2025 · Microsoft
- Stable task.contribution.ts · Microsoft
- Stable abstractTaskService.ts · Microsoft
- Stable tasks.ts · Microsoft
'개발 > Visual Studio Code' 카테고리의 다른 글
| 커맨드 팔레트 39부: VS Code 자주 재시작하는 Task를 단축키로 바로 지정하기 (0) | 2026.09.08 |
|---|---|
| 커맨드 팔레트 38부: VS Code 실행 중 Task 하나만 새 정의로 재시작하기 (0) | 2026.09.07 |
| 커맨드 팔레트 36부: VS Code Terminal 탭에서 같은 Task 바로 재실행하기 (0) | 2026.09.05 |
| 커맨드 팔레트 35부: VS Code Task Terminal을 아이콘과 색으로 빠르게 구분하기 (1) | 2026.09.04 |
| 커맨드 팔레트 34부: VS Code 재사용 Terminal 안내만 숨기고 Task 출력 유지하기 (0) | 2026.09.02 |