- 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
'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 |