왜 필요한가

ssh 접속이 끊기면 그 접속에서 실행 중이던 전경 프로세스도 함께 종료된다. 와이파이가 잠깐 끊기거나 노트북 뚜껑을 닫는 것만으로 30분째 돌던 rsync, 컴파일, 출력 파일을 지켜보던 tail -f가 사라진다.

tmux(terminal multiplexer)는 서버에서 셸을 대신 들고 있는 프로그램이다. 내 ssh 접속은 tmux 화면을 들여다보는 창일 뿐이라, 접속이 끊겨도 tmux 안의 셸과 프로그램은 계속 돈다. 다시 접속해서 붙으면 떠날 때 화면 그대로다. 대부분의 클러스터에 설치돼 있다. 없다면 screen이 있을 가능성이 높다.

세션 만들기, 떼기, 다시 붙기

tmux의 단위는 세션이다. 클러스터에 접속한 뒤 이름을 붙여 새 세션을 만든다. 이름은 작업 내용을 알아볼 수 있게 짓는다.

$ ssh vanda
$ tmux new -s h2o-opt

화면 아래에 초록색 상태 표시줄이 생기면 tmux 안에 들어온 것이다. tmux의 단축키는 모두 prefix 키 다음에 누른다. 기본 prefix는 Ctrl-b다. Ctrl-b d는 Ctrl과 b를 함께 눌렀다 떼고, 이어서 d를 누르라는 뜻이다.

# 세션에서 떼기(detach): Ctrl-b d
[detached (from session h2o-opt)]

# 돌고 있는 세션 목록
$ tmux ls
h2o-opt: 1 windows (created Tue Sep 29 00:08:22 2026)
md-run: 1 windows (created Tue Sep 29 00:08:22 2026)

# 다시 붙기(attach)
$ tmux attach -t h2o-opt

떼고 나서 ssh를 끊어도, 접속이 저절로 끊겨도 세션은 남는다. 다시 접속해서 tmux ls로 확인하고 tmux attach -t로 붙는다. 세션이 하나뿐이면 tmux attach만 쳐도 된다. 세션이 하나도 없으면 tmux ls는 no server running on ...이라고 답한다.

다 쓴 세션은 안에서 exit로 마지막 셸을 닫거나, 밖에서 이름으로 끈다.

$ tmux kill-session -t md-run

창과 칸

세션 하나에 창(window)을 여러 개 둘 수 있고, 창 하나를 칸(pane)으로 나눌 수 있다. 한 칸에서 입력 파일을 고치고 옆 칸에서 qstat을 보는 식으로 쓴다.

키동작
Ctrl-b c새 창
Ctrl-b n / Ctrl-b p다음 / 이전 창
Ctrl-b 0…9번호로 창 이동
Ctrl-b ,창 이름 바꾸기
Ctrl-b %좌우로 나누기
Ctrl-b "위아래로 나누기
Ctrl-b 방향키칸 사이 이동
Ctrl-b z현재 칸을 전체 화면으로 / 되돌리기
Ctrl-b x현재 칸 닫기(확인을 묻는다)
Ctrl-b d세션에서 떼기
Ctrl-b ?단축키 전체 목록(q로 닫기)

상태 표시줄 왼쪽에 0:bash 1:vim*처럼 창 목록이 보이고, *가 현재 창이다.

스크롤

tmux 안에서는 터미널 프로그램의 스크롤바나 마우스 휠로 지난 출력을 볼 수 없다(아래의 mouse 설정을 켜기 전까지). Ctrl-b [로 복사 모드에 들어가면 방향키, PgUp, PgDn으로 올라갈 수 있다. 빠져나올 때는 q를 누른다.

~/.tmux.conf

클러스터 홈 디렉터리에 ~/.tmux.conf를 만들면 tmux가 시작할 때 읽는다. 두 줄이면 쓰기가 훨씬 편해진다.

# 마우스로 칸 고르기, 크기 조절, 휠 스크롤
set -g mouse on
# 칸마다 기억하는 출력 줄 수 (기본 2000)
set -g history-limit 50000

설정은 새로 시작한 tmux 서버에만 적용된다. 이미 떠 있는 세션에서는 Ctrl-b :를 누르고 source-file ~/.tmux.conf를 입력하면 다시 읽는다. mouse를 켜면 터미널 프로그램의 드래그 복사가 tmux에 가로채이는데, 대부분의 터미널에서 Shift를 누른 채 드래그하면 원래대로 복사된다.

로그인 노드에서의 주의

tmux 안이라도 계산은 스케줄러로

tmux로 세션이 살아 있다고 해서 로그인 노드에서 ORCA나 LAMMPS를 직접 돌려도 된다는 뜻은 아니다. 로그인 노드는 모든 사용자가 나눠 쓰는 입구이고, 무거운 프로세스는 관리자가 강제로 끄는 경우가 많다. 계산은 작업 스크립트로 제출한다(09장). tmux는 전송, 편집, 컴파일, 작업 상태 확인처럼 가벼운 일에 쓴다.

클러스터에 따라 로그인 노드가 여러 대이고, 같은 주소로 접속해도 매번 다른 노드에 붙을 수 있다. tmux 세션은 그것을 만든 노드에만 있다. 다시 접속했는데 tmux ls에 세션이 없다면 hostname으로 지금 어느 노드인지 확인하고, 이전 노드 이름으로 직접 ssh한다.

screen

screen은 tmux보다 오래된 같은 종류의 프로그램이다. 오래된 시스템에서 tmux가 없을 때 쓴다. 개념은 같고 키만 다르다.

동작tmuxscreen
새 세션tmux new -s NAMEscreen -S NAME
떼기Ctrl-b dCtrl-a d
목록tmux lsscreen -ls
다시 붙기tmux attach -t NAMEscreen -r NAME