본문 바로가기
C.W.K.
Stream
Lesson 05 of 10 · published

백그라운드 실행과 nohup

~8 min · nohup, disown, background

Level 0창 구경꾼
0 XP0/95 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

터미널 연결이 끊긴 뒤에도 실행하려면

명령 끝에 &를 붙였다는 사실만으로 셸과 터미널의 수명이 분리되지는 않아. 로그아웃 때 SIGHUP을 받거나 표준 입력과 출력이 닫힌 터미널을 계속 가리킬 수 있어. nohup, disown, setsid는 서로 다른 연결을 바꾸므로 어떤 실패를 막으려는지 먼저 정해야 해.

  • nohup ./script &: SIGHUP을 무시하도록 시작하고 터미널 출력의 기본 목적지를 바꿀 수 있어.
  • ./script & disown: 실행 중인 작업을 현재 대화형 셸의 작업 표에서 떼어 내.
  • setsid ./script &: 제어 터미널이 없는 새 세션에서 시작해.

표준 입력과 로그 목적지를 명시해

nohup ./script < /dev/null > out.log 2>&1 &
pid=$!
printf '%s
' "$pid" > run.pid

터미널이 사라진 뒤 입력을 기다리거나 출력 쓰기에 실패하지 않게 작업 성격에 맞는 목적지를 정해. 로그 파일이 무한히 커지지 않게 회전과 보존 정책도 필요해. PID를 저장했다면 나중에 같은 PID가 다른 프로세스에 재사용되지 않았는지 명령과 시작 시각을 함께 확인해.

다시 화면에 붙을 작업과 서비스는 다르게 관리해

사람이 나중에 화면으로 돌아와 대화형으로 확인할 작업은 tmux 세션이 잘 맞아. 부팅 뒤 자동 시작, 실패 재시작, 선언된 환경과 일관된 중지가 필요한 프로세스는 launchd나 systemd 같은 서비스 관리자가 소유해야 해. 단순한 백그라운드 실행을 장기 서비스 계약으로 확대하지 마.

프로세스 존재 여부를 안전하게 확인해

kill -0 "$pid" && echo "process exists or is signalable"
ps -p "$pid" -o pid,lstart,command

kill -0은 실제 신호를 보내지 않지만 성공은 호출자가 해당 PID를 대상으로 삼을 수 있다는 뜻일 뿐이야. 실패는 프로세스가 없거나 권한이 부족한 경우 모두 가능해. 종료하려면 기록한 PID의 명령과 시작 시각이 기대한 작업과 같은지 다시 확인해.

nohup은 재시작 관리자가 아니야

nohup은 HUP 신호 처리와 일부 입출력 기본값을 바꾸지만 프로세스가 실패했을 때 다시 시작하거나 부팅 뒤 복원하지 않아. 종료 상태 회수, 단일 인스턴스 보장, 의존 서비스 순서와 건강 검사는 별도 계약이야. 중요한 작업은 결과를 누가 확인하고 실패를 누가 알릴지도 정해야 해.

살아 있음과 정상 작동을 구분해

PID가 존재해도 작업이 교착됐거나 잘못된 입력을 반복 처리할 수 있어. 최근 로그 시각, 결과 파일 증가, 처리량과 애플리케이션 건강 검사처럼 의미 있는 상태를 함께 봐. 실행 중이라는 운영체제 사실과 요청한 일을 올바르게 수행한다는 애플리케이션 사실은 서로 다른 증거야.

Code

안정적인 분리 실행·bash
nohup ./long-job.sh > job.log 2>&1 &
echo $!         # PID 확인
disown          # 현재 셸의 작업 목록에서 분리
# 터미널을 닫아도 작업은 계속됨

External links

Exercise

시험용 장기 명령을 nohup으로 시작해 stdin, stdout, stderr 목적지를 모두 명시하고 PID와 시작 시각을 기록해. 새 터미널에서 로그 증가와 프로세스 명령을 확인한 뒤, 기록한 PID가 같은 작업인지 재검증하고 정상 종료해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.