개발/Visual Studio Code

커맨드 팔레트 37부: VS Code 실행 중인 여러 Task 한 번에 재시작하기

반응형
VS CODE 초보자 시리즈 · 커맨드 팔레트 37부

실행 중인 여러 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

안전하게 시작하기 일괄 재실행은 현재 실행 중인 모든 Task 프로세스를 종료합니다. 파일 변경·배포·데이터 처리 중인 실제 Task가 목록에 있으면 실행하지 마세요. 중단 조건: 예상하지 못한 Task, 복구할 수 없는 작업 상태, 백업하지 않은 기존 tasks.json이 하나라도 있으면 실습을 멈춥니다.

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를 실수로 중단하지 않도록 실습 범위를 격리합니다.

  1. Ctrl+Shift+P를 누르고 Tasks: Show Running Tasks를 실행합니다.

입력 위치 빈 실습 폴더를 연 VS Code 명령 팔레트.

확인 대상: 실행 중 Task 이름과 개수
권장 시작 상태: 0개
정상 결과 실행 중 Task가 없거나, 사용자가 목적을 아는 항목만 보입니다.

확인 배포·데이터 처리·서버·감시기처럼 중단하면 안 되는 항목이 없는지 이름별로 봅니다.

실패 신호 예상하지 못한 Task가 한 개라도 보입니다.

주의 이 단계에서는 어떤 Task도 종료하지 않습니다. 되돌리기: 명령 팔레트를 닫고 별도 빈 폴더를 새 창에서 엽니다.

2. 기존 tasks.json 백업

목적 실습 뒤 원래 Workspace Task 구성을 복원할 수 있게 합니다.

  1. .vscode/tasks.json이 있으면 Workspace 밖의 사용자가 아는 위치에 복사하고 원본과 비교합니다.

입력 위치 VS Code Explorer와 Windows 파일 탐색기.

보호 대상: .vscode/tasks.json
비교: Select for Compare → Compare with Selected
정상 결과 원본과 백업의 내용 차이가 0개입니다.

확인 비교 Editor가 변경 줄을 표시하지 않는지 확인합니다.

실패 신호 백업 위치를 찾을 수 없거나 두 파일이 다릅니다.

주의 백업 전 전체 파일 덮어쓰기를 하지 마세요. 되돌리기: 편집하지 말고 백업을 다시 만든 뒤 이 단계로 재합류합니다.

3. 두 데모 Task 추가

목적 파일이나 네트워크를 바꾸지 않고 2분 동안 실행되는 독립 Task 두 개를 만듭니다.

  1. 새 파일이면 아래 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 실행

목적 첫 번째 일괄 재실행 대상을 활성 상태로 만듭니다.

  1. 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를 찾지 못하거나 첫 출력 뒤 바로 종료됩니다.

주의 이 Task는 약 2분 뒤 자동 종료됩니다. 되돌리기: Tasks: Terminate Task에서 Alpha만 종료합니다.

5. Beta Task 실행

목적 두 번째 독립 대상을 동시에 활성화합니다.

  1. 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을 공유합니다.

주의 두 항목을 각각 직접 실행해야 다중 대상을 분명히 볼 수 있습니다. 되돌리기: 두 데모 Task를 종료하고 Step 3의 panel과 group을 다시 확인합니다.

6. 실제 대상 두 개 확인

목적 일괄 명령이 중단할 정확한 범위를 Human Gate에서 확인합니다.

  1. Tasks: Show Running Tasks를 실행하고 목록을 읽습니다.

입력 위치 명령 팔레트.

JCOS Batch Alpha
JCOS Batch Beta
정상 결과 위 두 항목이 모두 보이고 예상하지 못한 실제 업무 Task는 없습니다.

확인 이름과 개수를 하나씩 대조합니다.

실패 신호 한 항목만 보이거나 중단하면 안 되는 Task가 함께 보입니다.

주의 목록에 있는 모든 Task가 다음 단계의 대상입니다. 되돌리기: 명령을 취소하고 별도 Workspace에서 데모만 다시 실행합니다.

7. 모두 한 번에 재실행

목적 현재 실행 중인 두 Task를 한 번의 명령으로 새 실행으로 교체합니다.

  1. 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만 변경됩니다.

주의 명령은 각 프로세스를 종료하므로 메모리 상태와 연결을 보존하지 않습니다. 되돌리기: Show Running Tasks로 상태를 확인하고 실패한 항목만 Restart Running Task로 재시도합니다. 원인이 불명확하면 중단합니다.

8. 종료하고 원래 상태로 복원

목적 데모 프로세스를 남기지 않고 Workspace 구성을 되돌립니다.

  1. Tasks: Terminate Task → All Running Tasks를 선택하고 tasks.json 백업을 복원합니다.

입력 위치 명령 팔레트, Terminal 패널, Explorer.

최종 실행 중 Task: 0개
tasks.json: 백업과 동일
정상 결과 heartbeat가 멈추고 실행 중 Task가 없으며 원래 Task 정의가 보존됩니다.

확인 Show Running Tasks와 파일 Compare를 함께 사용합니다.

실패 신호 heartbeat가 계속되거나 기존 Task 정의가 사라집니다.

주의 All Running Tasks에는 실제 업무 Task도 포함될 수 있으므로 Step 6의 목록 확인을 다시 합니다. 되돌리기: 데모 Terminal만 닫고, 기존 파일은 백업에서 복원한 뒤 완료 조건을 다시 검사합니다.

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

핵심 판단 원인을 확인하지 못하면 오류 원문, Task 이름, 마지막 출력을 보존하고 임의 변경 없이 중단합니다. 복구 뒤에는 두 RUN_ID 변경과 최종 실행 중 Task 0개를 다시 확인합니다.

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입니다.

다음 편 예고 커맨드 팔레트 38부에서는 Tasks: Restart Running Task로 실행 중인 Task 하나만 새 정의로 다시 시작하고, 다른 Task가 그대로 유지되는지 확인합니다.
반응형
이 글이 유용했다면 링크를 공유해 보세요.