Post

Linux - nohup에 대해 알아보자.

Linux - nohup에 대해 알아보자.

포어그라운드와 백그라운드

nohup을 이해하는데 필요한 배경 지식인 포어그라운드와 백그라운드에 대해 간략하게 설명하자면, 아래와 같다.

  • 포어그라운드(foreground): 프로세스가 터미널 화면에서 바로 실행되는 것으로 실행되면 터미널 화면이 잠기기 때문에 추가적인 명령어 입력을 위해선 새 터미널을 열어야하고, 터미널이 닫힐 경우 프로세스가 종료되는 상태
  • 백그라운드(background): 프로세스가 컴퓨터 내부에서 동작하기 때문에 포어그라운드처럼 터미널이 잠기지 않고, 한 터미널에서 추가적인 명령어 입력이 가능함

포어그라운드 프로세스 실행 예시

1
java -jar example.jar

위와 같이 커맨드를 실행할 경우 포어그라운드로 프로세스가 실행되기 때문에 해당 터미널에서 추가적인 명령어 입력이 불가능해진다.

또한, 터미널을 닫을 경우 실행되고 있는 프로세스가 종료되게 된다.

Ctrl + C 단축키를 통해 포어그라운드로 실행되고 있는 프로세스를 종료하는 것이 가능은 하지만, 그렇게 되면 프로세스 자체가 종료되기 때문에 포어그라운드로 프로세스를 실행시키는 것은 추천되지 않음

이러한 문제를 해결하기 위해 포어그라운드가 아닌 백그라운드에서 프로세스를 실행시키고, 터미널이 종료되더라도 프로세스를 유지하기 위해 사용되는 것이 nohup ... &이다.

nohup

nohup ... & 사용 형태는 아래와 같다.

1
nohup [실행커맨드] &

사용 예시

1
nohup java -jar example.jar >> outlog.log &

위 커맨드와 같이 실행할 경우 포어그라운드가 아닌 백그라운드에서 프로세스가 실행되며, outlog.log라는 파일에 로그가 쌓이게 된다.

또한, 터미널을 닫더라도 프로세스가 죽지 않고 유지된다.

리다이렉션을 사용하지 않고 실행할 경우 nohup.out 이라는 파일이 기본값으로 설정되어 있기 때문에 해당 파일에 로그가 쌓이게 됨

This post is licensed under CC BY 4.0 by the author.