리눅스 nohup 사용 방법, &과의 차이

리눅스에서 터미널을 종료하면 실행되고 있던 프로세스들 역시 종료됩니다. 터미널 세션이 끊어지더라도 프로세스가 계속 실행될 수 있는 방법은 없을까요? 그 방법이 nohup입니다.

 

이 글에선 nohup의 사용 방법과 더불어 nohup과 함께 자주 사용되고, 비슷해 보이는 개념인 백그라운드 실행 명령어 &도 설명드리겠습니다.

nohup

nohup은 no hang up의 줄임 말입니다. “끊지 않는다”는 의미가 직접적으로 담겨있습니다. 예를 들어, 리눅스에서 “Hello World”라는 문자열을 출력하는 쉘 스크립트 hello.sh 파일을 실행한다고 하면 아래와 같이 사용합니다.

nohup ./hello.sh

기본적으로 nohup으로 실행한 결과는 nohup.out 파일에 저장됩니다.

cat nohup.out
Hello World

쉘 스크립트가 아닌 리눅스 명령어를 nohup으로 실행할 수도 있습니다.

nohup ping google.com 

백그라운드 실행 (&)

nohup과 비슷해 보이기도 하고, 함께 자주 쓰기도 하는 명령어로는 &가 있습니다. &를 붙여서 프로세스를 실행하면 해당 프로세스는 포그라운드가 아닌 백그라운드로 실행됩니다.

 

리눅스에서 포그라운드와 백그라운드를 쉽게 말하면, 포그라운드로 실행한 프로세스는 실행 후 엔터를 치는 순간 종료되어 버리지만, 백그라운드로 실행하면 엔터를 쳐도 프로세스가 끊기지 않고 실행됩니다.

 

결론적으로 둘의 차이는 nohup은 터미널과 세션이 끊겨도 프로세스가 종료되지 않습니다. &은 백그라운드로 프로세스를 실행하지만 터미널과 세션이 끊기면 프로세스가 종료됩니다.

 

때문에 터미널과 세션이 끊겨도 프로세스가 종료되지 않으면서, 백그라운드로 프로세스를 실행하고 싶을 때 두 명령어를 함께 사용합니다.

nohup ping google.com &

정리하자면, nohup과 &은 프로세스가 세션이 끊긴 뒤에도, 백그라운드에서 실행 상태가 유지되길 바랄 때 사용합니다. 예를 들어, 자바 프로그램을 실행하는 sh 파일이 있다면 실행 시 nohup과 &를 사용해 스크립트를 짰을 가능성이 있습니다. 만약 사용을 원치 않으면 해당 부분의 스크립트를 수정하면 됩니다. 

반응형

댓글

Designed by JB FACTORY