자주 재시작하는 Task를 단축키로 바로 지정하기
두 Task가 실행 중일 때 문자열 인수를 가진 사용자 단축키로 Target만 직접 재시작하고 Guard가 그대로 실행되는지 확인합니다.
이번 편의 핵심
단축키 뒤 Target의 RUN_ID만 바뀌고 Guard의 RUN_ID는 유지되면 완료입니다.
매번 실행 중 Task 목록에서 대상을 고르는 대신 workbench.action.tasks.restartTask에 정확한 label을 전달합니다.
1. 시작하기 전에
난이도는 초급이지만 위험도는 HIGH입니다. 재시작은 실행 중 Target 프로세스를 먼저 종료하고, User keybindings.json 변경은 모든 Workspace에 영향을 줍니다.
준비할 것
- 신뢰한 빈 연습 폴더 — 확인: 상태 표시줄에 Restricted Mode가 없고 Explorer에 실제 업무 파일이 없습니다.
- PowerShell — 확인: PowerShell에서
$PSVersionTable.PSVersion을 실행하면 버전이 출력됩니다. - 사용자 단축키 백업 — 확인: Preferences: Open Keyboard Shortcuts (JSON)으로 연 파일 전체를 별도 사본에 보관했습니다.
- VS Code Stable — 확인: 이 글은 Windows x64 User Stable 1.136.1, commit
a44adf7f53e00964ab890f9f8758a334f1fc15bc에서 검증했습니다.
적용 환경 Windows 11 · VS Code Stable 1.136.1 · PowerShell · 신뢰한 Workspace Folder
2. 알아둘 핵심 개념
User keybindings.json
VS Code 전체에 적용되는 사용자 단축키 규칙 파일입니다. Workspace의 .vscode/tasks.json과 범위가 다르므로 방금 추가한 객체만 제거할 수 있도록 원본을 백업합니다.
명령 인수 args
단축키가 command를 실행할 때 함께 전달하는 값입니다. 이 실습의 문자열은 실행 중 Task의 label 또는 identifier와 비교되므로 철자와 대소문자가 정확해야 합니다.
직접 매칭과 Fallback
여러 Task가 실행 중이고 문자열이 일치하면 Target을 바로 재시작합니다. 일치하지 않으면 Select the task to restart 선택 목록으로 돌아갑니다. 선택 목록이 뜨는 것은 이 실습의 Failure Signal입니다.
문자열과 Task 식별자 객체
구현은 문자열 또는 Task 식별자 객체를 받습니다. 일반 process Task에는 검증된 문자열 label을 사용합니다. 객체형 식별자는 확장 공급자가 정의한 type과 필드가 정확히 맞아야 하므로 임의의 {"type":"process","task":"label"}을 label 별칭처럼 만들지 않습니다.
Chord 단축키
ctrl+k ctrl+alt+r는 Ctrl+K를 놓은 뒤 Ctrl+Alt+R을 누르는 두 단계 chord입니다. 설치한 확장과 기존 사용자 규칙에 따라 충돌할 수 있습니다.
3. 순서대로 진행하기
각 단계의 정상 결과를 확인한 뒤 다음 단계로 이동합니다.
1. 연습 폴더와 백업 범위 확인
목적 실습과 실제 작업을 분리합니다.
- 빈 폴더
jcos-shortcut-lab을 열고 Restricted Mode가 아닌지 확인한 뒤, 현재 Userkeybindings.json전체를 별도 텍스트 파일에 복사합니다.
입력 위치 VS Code 상태 표시줄, Explorer, Preferences: Open Keyboard Shortcuts (JSON).
연습 폴더: <원하는-경로>\jcos-shortcut-lab
백업 파일: <백업-경로>\keybindings-before.json
<원하는-경로>와 <백업-경로>는 본인이 소유한 실제 폴더 경로로 바꿉니다.
정상 결과 현재 Workspace와 백업 사본 위치를 말할 수 있습니다.
확인 Explorer 루트가 연습 폴더이고 백업 파일을 열어 원문이 보이는지 확인합니다.
실패 신호 실제 프로젝트가 열려 있거나 Restricted Mode이거나 백업 사본이 비어 있습니다.
2. 두 장기 실행 Task 만들기
목적 재시작 대상과 보호 대상을 동시에 관찰합니다.
- 연습 폴더의
.vscode/tasks.json을 만들고 아래 JSON을 그대로 저장합니다.
입력 위치 연습 Workspace의 .vscode/tasks.json.
{
"version": "2.0.0",
"tasks": [
{
"label": "JCOS Shortcut Target",
"type": "process",
"command": "powershell.exe",
"args": ["-NoProfile", "-Command", "$id=[guid]::NewGuid().ToString('N').Substring(0,8); Write-Output ('SHORTCUT_TARGET RUN_ID=' + $id); 1..60 | ForEach-Object { Start-Sleep -Seconds 2; Write-Output ('SHORTCUT_TARGET HEARTBEAT=' + $_) }"],
"problemMatcher": [],
"presentation": {"reveal":"always","focus":false,"panel":"dedicated","group":"jcos-restart-shortcut","clear":true,"showReuseMessage":false}
},
{
"label": "JCOS Shortcut Guard",
"type": "process",
"command": "powershell.exe",
"args": ["-NoProfile", "-Command", "$id=[guid]::NewGuid().ToString('N').Substring(0,8); Write-Output ('SHORTCUT_GUARD RUN_ID=' + $id); 1..60 | ForEach-Object { Start-Sleep -Seconds 2; Write-Output ('SHORTCUT_GUARD HEARTBEAT=' + $_) }"],
"problemMatcher": [],
"presentation": {"reveal":"always","focus":false,"panel":"dedicated","group":"jcos-restart-shortcut","clear":true,"showReuseMessage":false}
}
]
}
정상 결과 Problems 패널에 JSON 오류가 없고 두 label이 각각 한 번만 있습니다.
확인 type은 문자열 process, command는 powershell.exe, 실행 위치는 현재 Workspace입니다.
실패 신호 JSON 밑줄, command not found, label 중복이 보입니다.
3. 후보 단축키 충돌 확인
목적 기존 동작을 덮어쓰지 않습니다.
- Ctrl+K Ctrl+S로 Keyboard Shortcuts를 열고
ctrl+k ctrl+alt+r을 검색한 뒤, 결과가 있으면 Show Same Keybindings로 command와when을 확인합니다.
입력 위치 Keyboard Shortcuts 편집기 검색창.
ctrl+k ctrl+alt+r
충돌하면 이후 예시의 key만 본인이 확인한 미사용 chord로 바꿉니다.
정상 결과 같은 상황에서 먼저 실행될 활성 규칙이 없습니다.
확인 같은 key를 가진 사용자·기본·확장 규칙의 command와 when을 읽습니다.
실패 신호 같은 상황에서 실행되는 기존 규칙이 있습니다.
4. Target 전용 단축키 추가
목적 선택 목록을 생략하고 실행 중 Target label을 직접 지정합니다.
- 백업이 존재함을 확인한 뒤 Preferences: Open Keyboard Shortcuts (JSON)으로 연 기존 배열 안에 아래 객체 하나를 추가하고 저장합니다.
입력 위치 User keybindings.json. 이 파일은 User 범위이며 현재 Workspace에만 한정되지 않습니다.
{
"key": "ctrl+k ctrl+alt+r",
"command": "workbench.action.tasks.restartTask",
"args": "JCOS Shortcut Target"
}
정상 결과 JSON 오류가 없고 Keyboard Shortcuts 검색 결과에 사용자 규칙이 보입니다.
확인 command, 문자열 args, key를 문자 단위로 비교합니다.
실패 신호 빨간 밑줄, 중복 쉼표, Target label 철자 불일치가 있습니다.
5. Target과 Guard 실행
목적 직접 매칭 전 기준 RUN_ID 두 개를 확보합니다.
- Tasks: Run Task로
JCOS Shortcut Target, 이어서JCOS Shortcut Guard를 실행합니다.
입력 위치 Command Palette와 두 전용 Terminal.
SHORTCUT_TARGET RUN_ID=<8자리>
SHORTCUT_GUARD RUN_ID=<8자리>
<8자리>는 실행마다 자동 생성되므로 직접 입력하지 않습니다.
정상 결과 두 Terminal에서 서로 다른 기준 RUN_ID와 증가하는 HEARTBEAT가 보입니다.
확인 두 값을 메모하고 Tasks: Show Running Tasks에 두 label이 있는지 확인합니다.
실패 신호 하나만 실행 중이거나 label이 다르거나 PowerShell 오류가 납니다.
6. 단축키로 Target만 재시작
목적 문자열 args의 직접 매칭을 관찰합니다.
- 연습 Target 종료·재시작만 일어남을 다시 확인한 뒤 Ctrl+K를 놓고 Ctrl+Alt+R을 누릅니다.
입력 위치 VS Code 창. 예시에는 when이 없어 전역으로 활성화됩니다.
단축키 전 Target: SHORTCUT_TARGET RUN_ID=<이전값>
단축키 후 Target: SHORTCUT_TARGET RUN_ID=<새값>
Guard: SHORTCUT_GUARD RUN_ID=<같은값>
정상 결과 선택 목록 없이 Target만 재시작하고 Guard heartbeat는 끊기지 않습니다.
확인 Target RUN_ID는 달라지고 Guard RUN_ID는 같은지 동시에 비교합니다.
실패 신호 선택 목록이 뜨거나 Guard가 종료·재시작됩니다.
args 철자를 고친 뒤 두 기준값을 다시 확보합니다.7. 충돌 로그와 완료 상태 교차 확인
목적 실제로 의도한 command가 선택됐는지 입력 화면과 독립적으로 확인합니다.
- 필요하면 Developer: Toggle Keyboard Shortcuts Troubleshooting을 켜고 chord를 한 번 더 누른 뒤 즉시 끕니다.
입력 위치 Command Palette와 Output 패널의 Keyboard Shortcuts Troubleshooting 로그.
기대 command ID:
workbench.action.tasks.restartTask
정상 결과 로그에 의도한 command가 기록되고 Target만 다시 새 RUN_ID를 얻습니다.
확인 로그, Target·Guard RUN_ID, Running Tasks 목록을 교차 확인합니다.
실패 신호 다른 command가 선택되거나 같은 key의 다른 규칙이 먼저 매칭됩니다.
key만 바꿉니다.8. 데모 종료와 사용자 단축키 복원
목적 장기 실행 프로세스와 전역 사용자 변경을 남기지 않습니다.
- Tasks: Terminate Task로 두
JCOS ShortcutTask를 각각 종료하고 Userkeybindings.json에서 추가한 객체만 제거합니다.
입력 위치 Command Palette, Terminal, User keybindings.json.
정리 후 기대 상태:
- Tasks: Show Running Tasks → 데모 0개
- Keyboard Shortcuts 검색 → 추가 사용자 규칙 0개
- 백업과 현재 keybindings.json → 기존 규칙 동일
정상 결과 데모 Task와 추가 단축키가 모두 사라지고 기존 사용자 규칙은 보존됩니다.
확인 Running Tasks 목록과 백업 비교를 수행합니다.
실패 신호 데모 프로세스가 남거나 다른 사용자 규칙까지 달라졌습니다.
4. 완료 확인하기
입력 화면과 독립된 방법을 포함해 결과를 교차 확인합니다.
- Target의 첫 RUN_ID와 단축키 뒤 RUN_ID를 비교합니다 — 두 값이 다릅니다.
- Guard의 전후 RUN_ID와 heartbeat를 비교합니다 — RUN_ID는 같고 heartbeat는 계속 증가합니다.
- Keyboard Shortcuts Troubleshooting 로그를 확인합니다 —
workbench.action.tasks.restartTask가 선택됩니다. - 정리 뒤 Running Tasks와 사용자 규칙을 확인합니다 — 데모 0개, 추가 규칙 0개입니다.
완료 기준 문자열 인수가 Target을 직접 찾아 그 실행만 바꾸고 Guard와 기존 사용자 단축키는 보존됐습니다.
5. 문제가 생겼다면
Select the task to restart가 나타남
먼저 확인 args가 정확히 JCOS Shortcut Target인지, Target이 실제 실행 중인지 확인합니다.
복구 목록을 취소하고 label을 정확히 고칩니다. 목록에서 임의 선택해 성공으로 우회하지 않습니다.
재합류 VSC-STEP-05
아무 반응이 없거나 다른 command가 실행됨
먼저 확인 Keyboard Shortcuts Troubleshooting 로그와 같은 key의 사용자·기본·확장 규칙을 확인합니다.
복구 충돌 없는 chord를 선택하고 예시의 key만 바꿉니다.
재합류 VSC-STEP-03
Target과 Guard가 모두 바뀜
먼저 확인 누른 command가 Rerun All Running Tasks가 아닌지 로그를 확인합니다.
복구 성공으로 판정하지 않습니다. 두 데모를 종료하고 정확한 command ID를 복원합니다.
재합류 VSC-STEP-05
객체형 args로 바꾼 뒤 매칭되지 않음
먼저 확인 객체의 type과 필드가 해당 확장 Task 공급자의 정의인지 확인합니다.
복구 이 일반 process 실습은 문자열 label로 되돌립니다. 임의의 process 객체 식별자를 만들지 않습니다.
재합류 VSC-STEP-04
Failed to terminate and restart task
먼저 확인 오류 원문과 두 Terminal 마지막 출력을 보존합니다. 원인을 권한이나 자식 프로세스로 단정하지 않습니다.
복구 Target만 수동 종료한 뒤 Tasks: Run Task로 다시 실행합니다. 원인 UNKNOWN이면 중단합니다.
재합류 VSC-STEP-05
6. 핵심 정리와 공식 자료
- User
keybindings.json의 문자열args로 실행 중 특정 Task label을 직접 지정할 수 있습니다. - 여러 Task 중 label이 일치하면 선택 목록 없이 그 Task만 재시작합니다.
- Target의 새 RUN_ID와 Guard의 같은 RUN_ID를 함께 확인해야 보호가 증명됩니다.
- 충돌 검사, 사용자 파일 백업, 프로세스 종료 영향, 정리와 롤백을 먼저 준비합니다.
공식 자료
아래 자료는 2026-09-07 Asia/Seoul에 접근했습니다. Stable API와 저장소 링크는 Windows x64 User Stable commit에 고정했고, UI 현지화와 확장별 식별자 필드는 환경에 따라 달라질 수 있습니다.
- Visual Studio Code Stable Update API · Microsoft
- Keyboard shortcuts for Visual Studio Code · Microsoft
- Integrate with External Tools via Tasks · Microsoft
- Stable abstractTaskService.ts · Microsoft
- Stable tasks.ts · Microsoft
keybindings.json과 workbench.action.tasks.terminate의 문자열 인수로 실행 중인 특정 Task만 바로 종료하고 Guard 보존·충돌·롤백을 확인합니다.'개발 > Visual Studio Code' 카테고리의 다른 글
| 커맨드 팔레트 41부: VS Code Task 실행 중일 때만 종료 단축키 켜기추천 태그: (0) | 2026.09.10 |
|---|---|
| 커맨드 팔레트 40부: VS Code 실행 중 특정 Task만 단축키로 종료하기 (1) | 2026.09.08 |
| 커맨드 팔레트 38부: VS Code 실행 중 Task 하나만 새 정의로 재시작하기 (0) | 2026.09.07 |
| 커맨드 팔레트 37부: VS Code 실행 중인 여러 Task 한 번에 재시작하기 (1) | 2026.09.06 |
| 커맨드 팔레트 36부: VS Code Terminal 탭에서 같은 Task 바로 재실행하기 (0) | 2026.09.05 |