- Nohub이란?

  • nohup은 no hang up의 약자로 백그라운드로 지속적으로 실행하는 프로세스를 의미한다.
  • nohup은 실행을 현재 사용자 세션이 아닌 운영체제가 제공하는 백그라운드 공간에서 실행을 한다.
  • 리눅스는 기본적으로 exit로 세션을 종료할 경우 터미널과 연결이 끊어졌다는 HUP(Hang Up,끊다) 시그널이 발생하고,  자식 프로세스들은 STOP 시그널을 받게 된다.
  • 이 때, nohup 명령은 “세션이 종료되더라도 계속 실행하게 하고 싶은 프로세스에는 HUP 시그널을 전달하지 않도록(No Hang Up,끊지마) 한다"는 의미이다.

 

- 사용법

- 기본 실행

% nohup [실행파일명]

- 예시

chmod 755 test.sh
  • test라는 이름을 가진 스크립트 파일을 nohup 명령으로 실행시켜보자.
  • nohup 으로 실행시킬 파일은 반드시 755 퍼미션을 가지고 있어야 한다.
% nohup ./test.sh
appending output to nohup.out
  • nohup 명령으로 스크립트를 실행해 보면, 위와 같은 메세지 표시가 된다.
  • 이렇게 실행 시키면, 프로세스는 대기 상태가 되고 Ctrl+C를 누르면 종료 된다.
    그리고, 해당 스크립트 프로그램의 표준 출력이 nohup을 실행 시킨 경로에 nohup.out 파일에 출력된다.

- nohup 명령의 표준 출력을 다른 파일에 쓰기

nohup ./test.sh > nohup_test.out
  • 표준 출력을 다른 파일에 쓰기 위에서는 리다이렉션(>, >>)을 사용하면 된다.
nohup ./test.sh > /dev/null
  • 아예 표준 출력을 쓰고 싶지 않다면 위와 같이 하면 된다.

 

- 백그라운드 실행

  • &를 사용하면 프로그램이 백그라운드로 실행된다.
% ./test.sh &
  • 여기서 Ctrl+C를 누르지 않아도 대기 상태가 되지 않는다.
% ps -ef | grep test.sh
  • 위 명령으로 백그라운드로 실행되고 있는 것을 확인 할 수 있다.

* nohup과 &의 차이는?

  • nohup는 프로그램을 데몬으로 형태로 실행시키는 것이기에 앞에서 설명했듯이 로그아웃 등과 같이 세션 연결이 끊기더라도 프로세스가 계속 동작된다. 그러나, 실행 시키면 대기 상태가 발생하고 Ctrl+C를 누르면 프로세스는 바로 종료된다.
  • 그에 비해, 백그라운드(&) 실행은 실행 시키면 대기 상태가 없지만, 세션 연결이 끊기면 실행한 프로그램도 함께 종료된다.
% nohup nohup ./test.sh > /dev/null &

위와 같이 nohup 명령을 백그라운드(&)로 같이 실행시키게 되면, 대기 상태도 없고 세션 연결이 끊기더라도 프로세스의 종료 없이 백그라운드로 실행되게 된다.

 

명령 Ctrl+C 터미널 종료
[command] 명령이 중단됨 명령이 중단됨
[command] & 명령이 중단되지 않음 명령이 중단됨
nohup [command] 명령이 중단됨 명령이 중단되지 않음
nohup [command] & 명령이 중단되지 않음 명령이 중단되지 않음

 

 

- 프로세스 종료

% ps -ef | grep test.sh
  501 61324 21348   0  7:34AM ttys001    0:00.01 /bin/bash ./test.sh
  501 61329 21348   0  7:34AM ttys001    0:00.00 grep test.sh

 

% kill 61324
  • 프로세스 종료는 먼저 다음 명령으로 프로세스 아이디를 조회 후, 종료시킬 프로세스 아이디를 kill 명령으로 종료시키면 된다. 

 

최신 리눅스는 nohup을 복제하는 systemd-run 사용을 권장하고 있다고 한다.

 

 

 

 

 

 

 


Reference

https://www.devkuma.com/docs/linux/nohup/

'Programming > Linux' 카테고리의 다른 글

[Linux] rsync란?  (0) 2023.04.28
[Linux] /tmp와 /var/tmp의 차이  (2) 2023.03.11
[Linux] Crontab 이란?  (0) 2022.06.30
[Linux] at이란?  (0) 2022.06.30

+ Recent posts