02장에서는 이름 없는 세션 하나를 만들고 없애는 것까지만 다뤘다. 실제 작업에서는 프로젝트별로 세션을 여러 개 만들고, 그 사이를 오가고, 필요 없어진 세션만 골라 종료해야 한다. 이 장은 그 실전 세션 관리 명령 — new-session, list-sessions, attach-session, switch-client, rename-session, kill-session, kill-server — 을 다룬다.
이 장을 읽기 전에
선행 챕터: 이 장은 02장: 설치와 첫 세션에서 다룬 tmux new -s, tmux ls, -d 옵션을 그대로 확장한다. 01장에서 배운 서버-클라이언트 구조(서버가 세션을 관리하고, detach는 클라이언트만 끊는다는 것)도 전제로 한다.
이 장의 깊이: 입문에서 중급(kill-session과 kill-server의 차이, target 문법의 함정을 설명할 수 있는 수준) 사이를 오간다. 다루지 않는 것: 한 세션 안의 윈도우·패널을 나누고 옮기는 조작은 04장에서, 여러 클라이언트가 같은 세션을 동시에 공유하는 시나리오는 12장에서, 세션 생성을 스크립트로 자동화하는 방법은 13장에서 각각 다룬다.
당신의 수준에 맞는 경로
| 수준 | 읽을 부분 | 핵심 목표 |
|---|---|---|
| 이름 없는 세션 하나만 써본 초보자 | 정신 모델, 명령과 옵션, 예시 | 프로젝트별로 이름을 붙인 세션을 여러 개 만들고 오갈 수 있다 |
| 여러 프로젝트를 동시에 다루는 개발자 | 예시(전환), 주의사항·함정 | switch-client로 detach 없이 세션 사이를 빠르게 이동할 수 있다 |
| 서버를 여러 사람과 공유하거나 정리해야 하는 사람 | 명령과 옵션(kill 계열), 주의사항·함정 | kill-session과 kill-server의 차이를 이해하고 실수로 다른 세션까지 지우지 않을 수 있다 |
| 세션 관리를 스크립트에 넣으려는 사람 | 예시(has-session), 흔한 오개념 | 세션 존재 여부를 스크립트에서 안전하게 확인하는 패턴을 파악한다(자동화 자체는 13장) |
정신 모델: 세션은 서버 안의 독립된 작업 단위
01장에서 다뤘듯 tmux 서버 하나가 여러 세션을 동시에 관리할 수 있다. 이 구조를 실전에서 쓰는 가장 흔한 방식은 프로젝트나 문맥별로 세션을 분리하는 것이다 — 예를 들어 work 세션에서는 주 업무 프로젝트를, personal 세션에서는 개인 스크립트를, monitor 세션에서는 로그를 지켜보는 식이다. 각 세션은 자신만의 윈도우·패널 구성을 독립적으로 유지하므로, 한 세션에서 윈도우를 몇 개 만들든 다른 세션에는 전혀 영향을 주지 않는다.
이 분리가 실질적인 이점을 준다. 세션을 이름 없이(tmux new) 계속 만들면 tmux ls에 숫자만 나열되어 어떤 세션이 무엇을 위한 것인지 구분할 수 없다. 반대로 처음부터 의미 있는 이름을 붙이면(tmux new -s work), 나중에 tmux attach -t work처럼 이름만으로 정확히 원하는 세션을 찾아갈 수 있다.
이 장에서 다루는 명령은 로컬 환경뿐 아니라 SSH로 접속한 원격 서버에서도 그대로 쓰인다 — 오히려 여러 세션을 이름으로 구분해 관리하는 습관은, 한 서버에 여러 사람이 접속하거나 한 사람이 여러 목적으로 SSH 세션을 오래 유지하는 원격 환경에서 더 중요해진다. 01장에서 다뤘듯 tmux 서버 자체는 데몬처럼 클라이언트 연결 여부와 무관하게 백그라운드에서 계속 실행되므로, 세션을 이렇게 나눠두면 SSH로 다시 접속했을 때도 어떤 세션이 무엇을 하고 있었는지 이름만으로 바로 알 수 있다.
명령과 옵션
tmux의 세션 관련 명령은 “만들기·나열하기·접속하기·전환하기·이름 바꾸기·분리하기·종료하기"라는 세션의 생애 주기를 그대로 따라간다. 이 순서를 알고 있으면 명령 이름 자체가 거의 기억할 필요 없이 예측 가능해진다 — 지금 무엇을 하고 싶은지(만들기인지, 접속인지, 종료인지)만 정하면 명령 이름은 그 동사에서 크게 벗어나지 않는다. 아래 표는 이 장에서 다루는 명령을 그 순서대로 정리한 것이다.
| 명령 | 주요 옵션 | 설명 |
|---|---|---|
new-session | -s 이름, -d, -A, -c 시작경로 | 새 세션을 만든다. -A는 같은 이름의 세션이 이미 있으면 새로 만드는 대신 그 세션에 접속한다. -c는 세션의 첫 윈도우가 시작할 작업 디렉터리(실제 파일 시스템 경로)를 지정한다 |
list-sessions(ls) | - | 서버가 관리 중인 모든 세션을 나열한다 |
attach-session(attach) | -t 대상, -d | 기존 세션에 접속한다. -d를 함께 쓰면 그 세션에 이미 붙어 있던 다른 클라이언트를 강제로 분리한다 |
switch-client | -t 대상 | 세션 안에서(즉 detach 없이) 다른 세션으로 클라이언트를 전환한다 |
rename-session | -t 대상 새이름 | 세션 이름을 바꾼다 |
detach-client | -s 세션, -a | 클라이언트를 세션에서 분리한다(prefix 키 Ctrl+b 뒤 d를 누르는 것과 같은 효과). -a는 단순 분리가 아니라 -t로 지정한 클라이언트를 제외한 나머지 클라이언트를 강제 종료(kill)한다는 점에서 attach-session -d보다 강한 동작이다 |
kill-session | -t 대상, -a | 지정한 세션에 딸린 모든 윈도우를 닫고 그 세션에 붙어 있던 클라이언트를 모두 분리한 뒤 세션을 없앤다. -a는 지정한 세션을 제외한 나머지 세션을 전부 종료한다 |
kill-server | - | tmux 서버와 그에 딸린 모든 클라이언트·세션을 통째로 종료한다 |
has-session | -t 대상 | 지정한 세션이 존재하지 않으면 오류를 반환하고 종료 코드 1로 끝난다(스크립트의 존재 여부 검사용) |
예시
프로젝트별로 세션 나누기
이름을 붙인 세션을 한 번에 여러 개 만들어 두면, 이후 tmux ls만으로 지금 서버가 관리 중인 작업 목록을 한눈에 파악할 수 있다. 아래 예시는 서로 다른 세 가지 문맥(업무, 개인, 로그 모니터링)을 각각 독립된 세션으로 분리하는 전형적인 패턴이다.
| |
접속과 전환
세션이 여러 개로 늘어나면 “지금 이 세션에서 저 세션으로 옮겨가는” 동작이 잦아진다. 터미널 밖에서 새로 붙는 것(attach-session)과, 이미 어떤 세션 안에 들어와 있는 상태에서 detach 없이 다른 세션으로 넘어가는 것(switch-client)은 결과 화면은 비슷해 보여도 실행 맥락이 다르다는 점에 주의한다.
| |
이름 바꾸기와 종료
세션을 정리할 때는 “이 세션 하나만 지운다"와 “이것만 남기고 나머지를 전부 지운다"를 헷갈리지 않는 것이 중요하다. 아래 예시는 이름 변경부터 시작해, 단일 종료·선택적 종료·서버 전체 종료까지 강도가 세지는 순서로 나열했다.
| |
스크립트에서 세션 존재 여부 확인하기
has-session은 세션을 만들기 전에 이미 있는지 먼저 확인하는 용도로 쓰인다. 이 패턴을 스크립트나 셸 함수로 확장하는 자동화는 13장에서 다루지만, 명령 자체는 이 장의 범위 안에 있다.
| |
주의사항·함정
kill-session -a의 반전된 의미: -a는 “지정한 세션을 종료"가 아니라 “지정한 세션을 제외한 나머지를 종료"한다. tmux kill-session -a -t work를 tmux kill-session -t work와 착각하면 정반대의 결과 — 지키려던 세션 하나만 남기고 나머지를 모두 지우는 것이 아니라, 지우려던 세션을 오히려 남기고 다른 모든 세션을 지우는 사고로 이어진다.
attach-session -d가 다른 사람을 쫓아낼 수 있다: -d 옵션은 같은 세션에 이미 붙어 있던 다른 클라이언트를 강제로 분리한다. 12장에서 다루는 세션 공유(페어 프로그래밍) 상황에서 무심코 -d를 붙이면 상대방의 화면이 갑자기 끊긴다.
세션 이름에 ., :를 피한다: tmux의 대상(target) 문법은 세션:윈도우.패널 형식을 쓰므로, 세션 이름 자체에 마침표나 콜론이 들어가면 -t 인자를 파싱할 때 세션·윈도우·패널 구분과 충돌할 수 있다. 프로젝트 이름에 이런 문자가 들어간다면 하이픈이나 언더스코어로 바꿔 세션 이름을 짓는 것이 안전하다.
흔한 오개념
“세션 이름을 처음에 잘못 지으면 나중에 바꿀 수 없다”는 생각은 틀렸다. rename-session으로 언제든 이름을 바꿀 수 있고, 이미 그 세션에 붙어 있는 클라이언트나 실행 중인 프로그램에는 아무 영향이 없다.
“detach한 세션에 다시 attach하면 새 세션이 만들어진다”는 오해도 흔하다. attach-session은 이름이 가리키는 기존 세션에 재접속할 뿐이며, -A 옵션을 명시적으로 준 경우에만 “없으면 새로 만들고 있으면 접속한다"는 동작으로 바뀐다.
“kill-session은 서버까지 끈다”는 오해도 있다. kill-session은 지정한 세션 하나만(또는 -a로 지정한 것을 제외한 나머지를) 종료하며, 서버는 다른 세션이 하나라도 남아 있으면 계속 실행된다. 서버까지 명시적으로 끄려면 kill-server를 따로 실행해야 한다(01장에서 다룬 “마지막 세션이 사라지면 서버도 종료된다"는 규칙은 kill-session으로 세션을 하나씩 지우다 마지막 하나가 사라졌을 때도 똑같이 적용된다).
다음 장에서는
04장: 윈도우와 패널 기초 - 분할·전환·닫기·zoom에서는 지금까지 세션 단위로만 다룬 조작을 한 단계 더 들어가, 한 세션 안에서 윈도우를 나누고 화면을 분할하는 법을 다룬다.
평가 기준
이 장을 읽은 후 다음을 할 수 있어야 한다.
- 프로젝트별로 이름을 붙인 세션을 여러 개 만들고,
tmux ls로 목록을 확인할 수 있다. attach-session과switch-client의 차이(터미널 밖에서 접속하는 것과, 세션 안에서 detach 없이 전환하는 것)를 설명할 수 있다.kill-session과kill-server가 서버의 생명주기에 미치는 영향을 구분해 설명할 수 있다.kill-session -a의 “제외” 의미를 정확히 이해하고, 의도한 세션만 남기거나 지울 수 있다.has-session으로 세션 존재 여부를 스크립트에서 안전하게 검사하는 패턴을 설명할 수 있다.
참고 및 출처
- tmux(1) - OpenBSD Manual —
new-session·attach-session·switch-client·rename-session·kill-session·kill-server·has-session공식 옵션과 설명. - tmux/tmux — tmux 공식 소스 저장소.
![Featured image of post [Tmux] 03. 세션(Session) 다루기 - 생성·접속·분리·종료](/post/tmux/tmux-session-new-attach-detach-kill/wordcloud_hu_e31c29a622b8821c.webp)
![[Tmux] 01. tmux란 무엇인가 - 터미널 멀티플렉서와 서버-클라이언트 구조](/post/tmux/what-is-tmux-terminal-multiplexer-architecture/wordcloud_hu_28fbc6f32146da51.webp)
![[Tmux] 02. 설치와 첫 세션 - 기본 명령과 실행 흐름](/post/tmux/install-tmux-first-session-basic-commands/wordcloud_hu_9f7a4340cf96afae.webp)
![[Tmux] 03. 세션(Session) 다루기 - 생성·접속·분리·종료](/post/tmux/tmux-session-new-attach-detach-kill/wordcloud_hu_72c0b4b5b9c07154.webp)
![[Tmux] 04. 윈도우와 패널 기초 - 분할·전환·닫기·zoom](/post/tmux/tmux-window-pane-basics-split-zoom/wordcloud_hu_6095cfec32f1ef59.webp)
![[Tmux] 05. Prefix 키와 커맨드 모드](/post/tmux/tmux-prefix-key-command-mode/wordcloud_hu_dab9c354915cbeac.webp)
![[Tmux] 06. tmux.conf 기초 - 설정 문법과 reload](/post/tmux/tmux-conf-basics-set-options-reload/wordcloud_hu_6423898ad1f99547.webp)
![[Tmux] 12. 세션 그룹과 다중 클라이언트 - 페어 프로그래밍](/post/tmux/tmux-session-groups-multiple-clients-pairing/wordcloud_hu_c6eaa0626f8e0888.webp)