WIPIVERSE

nohup

nohup

nohup(no hang up)은 유닉스 및 유닉스 계열 운영 체제에서 제공하는 표준 명령어이자 시스템 콜이다. 사용자가 터미널 세션을 종료하거나 로그아웃한 후에도 프로세스가 계속 실행되도록 하기 위해 SIGHUP(행업 시그널)을 무시하게 만드는 기능을 제공한다.

개요

터미널에서 실행된 프로세스는 기본적으로 제어 터미널이 닫히거나 사용자가 로그아웃하면 커널로부터 SIGHUP 시그널을 수신하여 종료된다. nohup 명령어는 해당 프로세스가 SIGHUP 시그널을 무시하도록 설정하여, 터미널 세션과 독립적으로 백그라운드에서 지속적으로 동작할 수 있게 한다.

사용법

기본 문법은 다음과 같다.

nohup 명령어 [인자...] &
  • &: 쉘에서 해당 작업을 백그라운드 작업으로 실행하도록 지시한다.
  • 표준 출력(stdout)과 표준 에러(stderr)는 기본적으로 현재 디렉터리의 nohup.out 파일에 기록된다. 리다이렉션(>, 2>&1 등)을 사용하여 출력 파일 경로를 변경할 수 있다.

동작 원리

  1. nohup 명령어로 프로세스를 실행하면, 해당 프로세스의 SIGHUP 시그널 핸들러가 SIG_IGN(무시)으로 설정된다.
  2. 표준 입력이 터미널인 경우 /dev/null로 리다이렉트된다.
  3. 표준 출력과 표준 에러가 터미널인 경우 nohup.out 파일로 리다이렉트된다(이미 리다이렉트된 경우 제외).
  4. 사용자가 로그아웃하여 터미널이 닫혀도 프로세스는 SIGHUP을 받지 않고 실행을 지속한다.

관련 개념 및 명령어

  • SIGHUP (Signal Hang Up): 제어 터미널 연결이 끊어졌을 때 프로세스 그룹에 전송되는 시그널.
  • disown: 쉘 내장 명령어로, 이미 실행 중인 백그라운드 작업을 쉘의 작업 테이블에서 제거하여 SIGHUP을 받지 않게 한다.
  • systemd-run / screen / tmux: 세션 영속성을 보장하는 더 현대적이거나 기능이 풍부한 대안 도구들.
  • 데몬(Daemon): 백그라운드에서 오래 실행되는 서비스 프로세스. nohup은 간易한 데몬화 기법으로 사용되기도 하나, 완전한 데몬화(세션 리더 분리, 작업 디렉터리 변경, 파일 디스크립터 닫기 등)는 별도의 절차가 필요하다.

표준 준수

nohup은 POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD 표준에 명시되어 있으며, 대부분의 유닉스/리눅스 배포판에 기본 탑재되어 있다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기