피드로 돌아가기
reptyr: Move a Running Process Into tmux After Forgetting to Start It
Dev.toDev.to
Infrastructure

ptrace syscall 기반 Running Process의 Controlling Terminal 완전 이전

reptyr: Move a Running Process Into tmux After Forgetting to Start It

Recca Tsai2026년 4월 20일3intermediate

Context

SSH 세션 종료 시 함께 종료되는 Foreground 프로세스를 보호하기 위한 메커니즘 부재. 기존 gdb 기반 스크립트는 I/O 리다이렉션 수준에 그쳐 입력 제어 및 Window resize 이벤트 전달에 한계 노출.

Technical Solution

  • ptrace syscall을 통한 실행 중인 프로세스의 제어권 강제 획득 및 새로운 Terminal 재연결
  • 단순한 I/O 리다이렉션을 넘어선 Controlling Terminal의 실제 변경을 통한 프로세스 소유권 이전
  • 기존 gdb 방식의 한계인 입력 중복 전달 문제와 ncurses 애플리케이션의 Resize 이벤트 미수신 문제 해결
  • 신규 터미널에서의 Ctrl-C 등 Signal 전달 체계 정상화를 통한 프로세스 제어력 회복
  • disown 명령어를 통한 기존 Shell과의 종속 관계를 먼저 제거한 후 reptyr로 프로세스를 Pull 하는 구조 설계

- 프로세스 이전 전 Ctrl-Z 및 bg, disown 순서로 Shell 종속성 제거 확인 - Ubuntu 환경 사용 시 /proc/sys/kernel/yama/ptrace_scope 값을 0 또는 1로 조정하여 ptrace 권한 확보 - Daemon 프로세스 및 setuid 바이너리는 구조적 특성상 ptrace 부착이 불가능함을 인지

원문 읽기