본문 바로가기

Language&Configuration/[Liunx]

[Linux] nohup 명령어 사용법 - 세션 연결이 끊어지더라도 지속적으로 동작

A. nohup 명령어 설명 및 특징
- 해당 명령어는 리눅스에서 프로세스를 실행한 터미널의 세션 연결이 끊어지더라도 지속적으로 동작 할 수 있게 해주는 명령어입니다.

 

1) 일반적으로 터미널에서 세션 로그아웃(logout)이 발생
   -> 리눅스는 해당 터미널에서 실행한 프로세스들에게 HUP signal 이 전달하여 종료
   -> 이 HUP signal을 프로세스가 무시(ignore)하도록 하는 명령어라는 뜻으로, nohup을 사용한다.

따라서 터미널에서 연결이 끊기거나 터미널을 종료해도 실행했던 프로세스들이 계속 실행된다.

 

2) 표준 출력(standard output)nohup.out 파일로 재지향(redirection) 합니다.

터미널이 종료되어도 표준 출력은 nohup.out 파일에 계속해서 기록되기 때문에 프로세스의 상태를 확인하는데 유용하지만, 필요 이상의 로그를 화면에 계속해서 출력하게 되면 nohup.out 파일의 용량이 매우 커지기 때문에 디스크 공간을 낭비하게 될 수 있습니다.

따라서 꼭 필요한 로그만 출력하거나 로그를 남기는 것이 불필요한 경우, 재지향을 통해 nohup.out 파일을 생성하지 않도록 하는 것이 좋습니다.

 

B. nohup 사용법

- nohup 명령어의 사용법은 매우 단순합니다.

nohup [프로세스] &

[프로세스] 부분에 실행하고자 하는 프로그램이나 스크립트를 지정
* 스크립트 파일 권한은 755 이상

일반적으로 nohup 명령어를 사용할 때는 백그라운드 작업으로 실행하는 경우가 많기 때문에 뒤에 &를 붙여서 백그라운드 실행이라는 것을 명시합니다.
nohup.out 파일을 생성하지 않으려면 표준출력과 표준에러를 /dev/null 로 재지향 해주면 됩니다.

nohup [프로세스] 1>/dev/null 2>&1 &

1>/dev/null 은 표준 출력을 사용하지 않겠다는 의미이고, 
2>&1 은 표준 에러를 표준 출력과 같게 만드는 명령어입니다.

nohup 으로 실행한 프로세스를 종료하려면 먼저 ps 명령어로 PID를 식별한 다음,
kill 명령어를 사용하여 해당 프로세스에 종료 시그널을 보내서 종료해야 합니다.

ps -ef | grep [프로세스명]

# PID 식별 후
kill -15 [PID]

# 종료되지 않으면 강제 종료 (비권장)
kill -9 [PID]