nohup 명령어: 사용법과 nohup.out, 터미널을 닫아도 계속 실행하기

공정위 광고 문구 Ver 3.1
공정위 광고 문구 Ver 3.2(모바일 전용)
테스트 환경RHEL 계열AlmaLinux 9.8coreutils 8.32root 계정Debian 12 · coreutils 9.1 일반 계정2026-11-05 확인
프로세스 · 작업 예약 명령어nohup위치/usr/bin/nohup
터미널을 닫아도 계속 실행하기

터미널을 닫거나 SSH 접속이 끊겨도 작업이 계속 돌게 하려면 nohup 명령어로 실행합니다. nohup은 터미널이 닫힐 때 오는 끊김 신호(SIGHUP)를 무시하게 한 채 명령을 실행합니다. AlmaLinux 9 서버에서 nohup을 붙인 sleep과 붙이지 않은 sleep을 함께 띄우고 터미널을 닫아 본 결과, nohup으로 띄운 쪽만 남아 계속 실행되었습니다.

아래 출력은 AlmaLinux 9.8 서버(root 계정)와 Debian 12 서버(일반 계정)에서 실행한 결과입니다. 오래 도는 작업 대신 sleep을 띄웠고, 끝낼 때는 띄울 때 받은 PID만 지정했습니다. 시각은 UTC로 출력했습니다.

1️⃣ nohup 명령어 사용법

  • ↪️ 명령 끝의 &와 터미널을 닫았을 때

nohup은 실행할 명령 앞에 붙이고, 명령 끝의 &로 백그라운드 실행을 지정합니다. GNU 공식 매뉴얼 기준으로 nohup 자체는 명령을 백그라운드로 보내지 않으므로, &를 빼면 명령이 끝날 때까지 프롬프트가 돌아오지 않습니다.

nohup sleep 300 &
[1] 3431609
nohup: ignoring input and appending output to 'nohup.out'

[1]은 작업 번호, 3431609는 띄운 프로세스의 PID입니다. 이어서 나온 문구는 키보드 입력을 받지 않고, 출력은 nohup.out 파일에 이어 쓴다는 안내였습니다.

방금 띄운 작업의 PID는 $!에 남으므로, 띄운 직후 [echo $!]로 확인해 적어 두면 상태를 볼 때나 끝낼 때 그 번호를 그대로 사용합니다.

echo $!
3431609

터미널을 닫으면 셸이 끊김 신호를 받고, 그 셸에서 띄운 작업에도 같은 신호를 보냅니다(Bash 공식 매뉴얼 기준). 이 동작을 확인하기 위해 새 터미널에서 [nohup sleep 300 &]와, nohup 없이 [sleep 301 &]를 함께 띄웠습니다.

sleep 301 &
[2] 3432892
jobs -l
[1]- 3432883 Running                 nohup sleep 300 &
[2]+ 3432892 Running                 sleep 301 &

두 작업이 Running인 상태에서 터미널 창을 닫고, 다른 셸에서 두 PID를 ps로 확인했습니다.

ps -p 3432883,3432892 -o pid,stat,etime,cmd
    PID STAT     ELAPSED CMD
3432883 S          00:05 sleep 300

nohup으로 띄운 sleep 300만 남았고, nohup 없이 띄운 sleep 301은 터미널을 닫을 때 함께 끝났습니다.

nohup으로 띄운 프로세스는 방해 금지 모드를 켠 휴대폰과 같습니다.

nohup은 coreutils 패키지에 들어 있는 명령입니다. 설치된 버전은 --version의 첫 줄로 확인합니다. AlmaLinux 9.8 서버는 8.32, Debian 12 서버는 9.1이었습니다.

nohup --version | head -1
nohup (GNU coreutils) 8.32
nohup --version | head -1
nohup (GNU coreutils) 9.1

2️⃣ nohup.out과 출력 리다이렉트

  • ↪️ 로그 파일 지정과 /dev/null

출력을 따로 정하지 않으면 nohup은 명령의 출력을 지금 폴더의 nohup.out에 이어서 기록합니다. 처음 만들어진 nohup.out은 크기가 0이었고, 권한은 만든 사용자만 읽고 쓰는 -rw-------였습니다.

ls -l nohup.out
-rw------- 1 root root 0 Oct 28 23:04 nohup.out

GNU 공식 매뉴얼은 umask 설정과 상관없이 nohup.out을 만든 사용자만 읽고 쓸 수 있게 만든다고 설명합니다. 지금 폴더에 쓸 수 없으면 홈 폴더의 $HOME/nohup.out에 쓰고, 그곳에도 쓸 수 없으면 명령을 실행하지 않습니다.

출력이 있는 명령을 nohup으로 실행하자, 명령이 끝난 뒤 출력이 nohup.out에 남았습니다.

nohup sh -c 'echo start; sleep 2; echo end' &
[1] 3431985
nohup: ignoring input and appending output to 'nohup.out'
cat nohup.out
start
end
[1]+  Done                    nohup sh -c 'echo start; sleep 2; echo end'

마지막 줄의 Done은 작업이 끝났다는 셸의 알림입니다. nohup.out은 실행할 때마다 새로 만들어지지 않고 같은 파일 끝에 이어 쓰이므로, 같은 폴더에서 여러 작업을 띄우면 출력이 한 파일에 섞입니다.

작업마다 로그를 나누려면 >로 출력 파일을 정하고, 2>&1로 오류 출력도 같은 파일에 보냅니다.

nohup sh -c 'echo start; sleep 300' > job.log 2>&1 &
[1] 3432059
cat job.log
nohup: ignoring input
start

2>&1까지 붙이자 터미널에는 작업 번호와 PID만 나왔고, nohup의 안내 문구 [nohup: ignoring input]은 로그 파일 첫 줄에 기록되었습니다.

>만 붙이고 2>&1을 빼면, 오류 출력을 표준 출력 쪽 파일로 돌린다는 안내가 터미널에 나옵니다.

nohup sleep 300 > job2.log &
[2] 3432097
nohup: ignoring input and redirecting stderr to stdout

출력을 남길 필요가 없는 작업은 /dev/null로 보냅니다. 이때도 터미널에는 작업 번호와 PID만 나왔습니다.

nohup sleep 300 > /dev/null 2>&1 &
[3] 3432137

네 가지 실행 꼴에서 출력이 간 곳과 터미널에 나온 문구는 아래와 같습니다.

실행 꼴출력이 가는 곳터미널에 나온 문구
nohup 명령 &지금 폴더의 nohup.outnohup: ignoring input and appending output to 'nohup.out'
nohup 명령 > 파일 &지정한 파일(오류 출력 포함)nohup: ignoring input and redirecting stderr to stdout
nohup 명령 > 파일 2>&1 &지정한 파일없음(안내 문구는 파일 첫 줄)
nohup 명령 > /dev/null 2>&1 &버림없음

3️⃣ nohup 프로세스 확인과 종료

  • ↪️ jobs, ps, kill

jobs 목록에는 지금 셸에서 띄운 작업만 나오므로, 터미널을 닫았다가 다시 접속한 뒤에는 nohup 프로세스를 ps -p로 PID를 지정해 확인합니다. 같은 셸에 있는 동안에는 jobs -l로 작업 번호와 PID, 상태를 함께 확인합니다.

jobs -l
[1]+ 3431609 Running                 nohup sleep 300 &

ps -p 뒤에 PID를 적고 -o로 칸을 고르면 그 프로세스 한 줄만 나옵니다. STAT의 S는 이벤트를 기다리며 잠든 상태이고, ELAPSED는 시작한 뒤 지난 시간입니다.

ps -p 3431609 -o pid,stat,etime,cmd
    PID STAT     ELAPSED CMD
3431609 S          00:03 sleep 300

끝낼 때는 kill 뒤에 PID를 적습니다.

kill 3431609

kill은 아무것도 출력하지 않았고, 이어서 jobs를 실행하자 그 작업이 Terminated로 나온 뒤 목록에서 빠졌습니다.

jobs
[1]+  Terminated              nohup sleep 300

같은 PID로 ps를 다시 실행하자 머리글만 나와, 프로세스가 끝난 것을 확인했습니다.

ps -p 3431609 -o pid,stat,etime,cmd
    PID STAT     ELAPSED CMD

nohup은 끊김 신호만 무시하므로, [kill -HUP]으로 같은 신호를 직접 보내도 끝나지 않습니다. nohup으로 띄운 sleep 305와 nohup 없이 띄운 sleep 306에 kill -HUP을 보냈습니다.

kill -HUP 3437119 3437128

이어서 jobs -l로 확인하자 nohup 쪽만 Running으로 남았고, sleep 306은 Hangup으로 끝났습니다.

jobs -l
[1]- 3437119 Running                 nohup sleep 305 &
[2]+ 3437128 Hangup                  sleep 306

kill에 신호를 적지 않으면 SIGTERM을 보내므로, nohup으로 띄운 작업도 [kill PID]로 끝납니다.

4️⃣ nohup 명령어 disown 비교와 옵션

  • ↪️ disown -h와 tmux 고르는 기준, 옵션 정리

🔲 nohup과 disown 비교

disown은 이미 띄운 작업에 쓰는 bash 내장 명령으로, nohup 없이 &로 띄운 작업을 나중에 터미널의 끊김 신호에서 떼어 낼 때 사용합니다. disown은 출력을 nohup.out으로 돌리지 않으므로, 출력이 있는 작업은 띄울 때 > 파일로 출력 자리를 정해 둡니다.

Bash 공식 매뉴얼 기준으로 disown을 옵션 없이 쓰면 그 작업이 jobs 목록에서 빠지고, disown -h는 목록에 남긴 채 끊김 신호만 보내지 않습니다. 먼저 sleep 302를 띄운 뒤 disown을 실행했습니다.

sleep 302 &
[1] 3433230
disown

disown은 아무것도 출력하지 않았고, 이어서 실행한 jobs -l도 빈 결과였습니다.

jobs -l

다음으로 sleep 303을 띄우고 작업 번호 %1에 disown -h를 실행했습니다.

sleep 303 &
[1] 3433343
disown -h %1

jobs -l로 확인하자 작업이 목록에 그대로 남았습니다.

jobs -l
[1]+ 3433343 Running                 sleep 303 &

여기에 아무 처리도 하지 않은 sleep 304를 하나 더 띄우고 터미널을 닫은 뒤, 다른 셸에서 세 PID를 확인했습니다.

sleep 304 &
[2] 3433474
ps -p 3433230,3433343,3433474 -o pid,stat,etime,cmd
    PID STAT     ELAPSED CMD
3433230 S          00:11 sleep 302
3433343 S          00:08 sleep 303

disown과 disown -h를 쓴 두 작업은 남았고, 아무 처리도 하지 않은 sleep 304만 끝났습니다. 네 방법을 견주면 아래와 같습니다.

방법쓰는 때jobs 목록터미널을 닫은 뒤출력
nohup 명령 &띄울 때남음남음nohup.out 또는 지정한 파일
명령 & 뒤 disown띄운 뒤빠짐남음바꾸지 않음
명령 & 뒤 disown -h띄운 뒤남음남음바꾸지 않음
명령 & 만—남음끝남바꾸지 않음

작업 화면을 다시 불러와 이어서 입력해야 하는 일에는 tmux 같은 터미널 멀티플렉서가 맞고, 한 번 띄워 두고 결과만 파일로 받는 일에는 nohup으로 충분합니다.

🔲 nohup 명령어 옵션

📌 주요 옵션: 이 글에서 실행한 결과

옵션하는 일이 글에서 본 결과
--version버전 정보를 출력하고 끝냄AlmaLinux 9.8 서버는 nohup (GNU coreutils) 8.32, Debian 12 서버는 nohup (GNU coreutils) 9.1

📎 그 밖의 옵션: 공식 매뉴얼 기준

옵션하는 일
--help도움말을 출력하고 끝냄

🔲 nohup 명령어 시뮬레이터

아래 시뮬레이터에서 nohup으로 작업을 띄우고, 🔌 칩으로 터미널을 닫았다가 다시 접속한 뒤 어떤 프로세스가 남는지 직접 확인할 수 있습니다.

nohup 명령어 시뮬레이터coreutils 8.32
[root@server work]#
브라우저 안에서만 동작하며 실제 프로세스는 띄우지 않습니다. sleep 시간은 실제 시계로 흐르고, ↑↓ 로 앞에서 쓴 명령을 다시 불러옵니다.

🔢 FAQ & 추천 콘텐츠

GNU 공식 매뉴얼 기준으로 nohup 자체가 실패하면 125, 명령을 찾았지만 실행할 수 없으면 126, 명령을 찾지 못하면 127로 끝납니다. AlmaLinux 9 서버에서 명령 없이 nohup만 입력했을 때는 125, 실행 권한이 없는 ./job.sh는 126, 없는 명령 nosuchcmd는 127이었습니다.

nohup은 nice 값을 바꾸지 않으므로, [nohup nice -n 10 sleep 307 &]처럼 nice를 함께 사용합니다. 이렇게 띄운 sleep을 ps로 확인하자 NI 칸은 10, STAT은 낮은 우선순위를 뜻하는 N이 붙은 SN이었습니다.

nohup 명령어의 옵션은 [--help]와 [--version] 두 가지뿐입니다. GNU 공식 매뉴얼 기준으로 옵션은 실행할 명령보다 앞에 적습니다.

ℹ️ 제휴 안내
본 사이트의 콘텐츠에는 제휴 링크가 포함되어 있습니다. 방문자가 이 링크를 통해 상품 또는 서비스를 구매하면 본 사이트는 판매처로부터 수수료를 지급받습니다. 이 과정에서 구매자가 지불하는 금액(이벤트 할인 시 금액이 내려갑니다↓)은 오르지 않습니다. 게시된 가격·할인·재고 정보는 작성 시점 기준이며 실제와 다를 수 있으므로, 구매 전 판매처에서 최종 확인하시기 바랍니다. 상품 선정과 평가는 자체 기준에 따라 작성되며, 수수료 지급 여부가 소개 순서나 평가 내용에 영향을 주지 않습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

인간임을 증명하세요: 6   +   2   =