본문 바로가기
강의 실습/비전공자도 이해할 수 있는 리눅스 입문 실전

터미널 창을 끄더라도 프로그램이 계속 실행되도록 만들기 (nohup, &)

by jint 2025. 11. 23.

1. 포그라운드(foreground), 백그라운드(background)란?
터미널 창을 끄더라도 프로그램이 계속 실행되도록 하기 위해 포그라운드(foreground)와 백그라운드(background)의 개념을 알아야 한다.

포그라운드(foreground)실행시킨 프로그램의 내용이 화면에서 실행되고 출력되는 상태
포그라운드 상태에서 다른 프로그램 조작 불가.
# 백그라운드(background) : 실행시킨 프로그램이 컴퓨터 내부적으로 실행되는 상태
프로그램이 어떻게 실행되고 있는 지에 대한 정보가 화면에 자동으로 출력되지 않기 때문에, 다른 명령어를 추가로 입력할 수 있고, 새로운 프로그램도 조작 가능.


2. 포그라운드(foreground)로 Spring Boot 실행
1) Spring Boot 서버 실행
- Ubuntu

ubuntu@ip-172-31-39-75:~$ cd linux-springboot/build/libs
ubuntu@ip-172-31-39-75:~/linux-springboot/build/libs$ ls
app.log  linux-springboot-0.0.1-SNAPSHOT-plain.jar  linux-springboot-0.0.1-SNAPSHOT.jar
ubuntu@ip-172-31-39-75:~/linux-springboot/build/libs$ java -jar linux-springboot-0.0.1-SNAPSHOT.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/

 :: Spring Boot ::                (v3.5.0)

2025-11-23T00:13:45.973Z  INFO 378907 --- [linux-springboot] [           main] c.e.l.LinuxSpringbootApplication         : Starting LinuxSpringbootApplication v0.0.1-SNAPSHOT using Java 17.0.16 with PID 378907 (/home/ubuntu/linux-springboot/build/libs/linux-springboot-0.0.1-SNAPSHOT.jar started by ubuntu in /home/ubuntu/linux-springboot/build/libs)
2025-11-23T00:13:45.982Z  INFO 378907 --- [linux-springboot] [           main] c.e.l.LinuxSpringbootApplication         : No active profile set, falling back to 1 default profile: "default"
2025-11-23T00:13:47.971Z  INFO 378907 --- [linux-springboot] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8080 (http)
2025-11-23T00:13:48.024Z  INFO 378907 --- [linux-springboot] [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2025-11-23T00:13:48.025Z  INFO 378907 --- [linux-springboot] [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.41]
2025-11-23T00:13:48.084Z  INFO 378907 --- [linux-springboot] [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2025-11-23T00:13:48.087Z  INFO 378907 --- [linux-springboot] [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1927 ms
2025-11-23T00:13:48.792Z  INFO 378907 --- [linux-springboot] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8080 (http) with context path '/'
2025-11-23T00:13:48.841Z  INFO 378907 --- [linux-springboot] [           main] c.e.l.LinuxSpringbootApplication         : Started LinuxSpringbootApplication in 3.902 seconds (process running for 4.967)
test
test


명령어를 입력해도 작동하지 않음.

2) 작동 확인
http://{EC2 인스턴스의 Public IP 주소}:8080 주소로 접속

- Ubuntu

2025-11-23T00:16:46.481Z  INFO 378907 --- [linux-springboot] [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2025-11-23T00:16:46.482Z  INFO 378907 --- [linux-springboot] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2025-11-23T00:16:46.483Z  INFO 378907 --- [linux-springboot] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms

 

포그라운드(foreground)로 Spring Boot 실행 확인


3) Spring Boot 서버를 실행시킨 채로 다른 명령어 입력
포그라운드 상태이기 때문에 명령어 입력해도 작동하지 않는다. Spring Boot 서버를 실행시켜놓고 다른 작업을 하고 싶다면, Spring Boot 서버를 백그라운드에서 실행시켜야 한다.


3. 백그라운드(background)로 Spring Boot 실행
1) 기존에 실행 중인 Spring Boot 서버 종료
Ctrl + c 로 종료시키기

- Ubuntu

^C2025-11-23T00:22:02.067Z  INFO 378907 --- [linux-springboot] [ionShutdownHook] o.s.b.w.e.tomcat.GracefulShutdown        : Commencing graceful shutdown. Waiting for active requests to complete
2025-11-23T00:22:02.078Z  INFO 378907 --- [linux-springboot] [tomcat-shutdown] o.s.b.w.e.tomcat.GracefulShutdown        : Graceful shutdown complete


2) Spring Boot 서버 종료 확인
http://{EC2 인스턴스의 Public IP 주소}:8080 주소로 접속

 

Spring Boot 서버 종료 확인


3) Spring Boot를 백그라운드에서 실행
프로세스를 백그라운드에서 실행시키려면 명령어의 앞 부분에 nohup 을 붙이고, 뒷 부분에 & 를 붙이면 된다.

- Ubuntu

ubuntu@ip-172-31-39-75:~/linux-springboot/build/libs$ ls
app.log  linux-springboot-0.0.1-SNAPSHOT-plain.jar  linux-springboot-0.0.1-SNAPSHOT.jar
ubuntu@ip-172-31-39-75:~/linux-springboot/build/libs$ nohup java -jar linux-springboot-0.0.1-SNAPSHOT.jar &
[1] 378982
ubuntu@ip-172-31-39-75:~/linux-springboot/build/libs$ nohup: ignoring input and appending output to 'nohup.out'

ubuntu@ip-172-31-39-75:~/linux-springboot/build/libs$ ls
app.log  linux-springboot-0.0.1-SNAPSHOT-plain.jar  linux-springboot-0.0.1-SNAPSHOT.jar  nohup.out


nohup java -jar linux-springboot-0.0.1-SNAPSHOT.jar & 명령어 입력 후 키보드 Enter 를 치면 새로운 명령어를 입력할 수 있다.

4) Spring Boot 서버 실행 확인
#1 IP 주소로 접속
http://{EC2 인스턴스의 Public IP 주소}:8080 주소로 접속시 다시 접속이 되는 것을 확인할 수 있다.

#2 리눅스 명령어로 확인
- Ubuntu

ubuntu@ip-172-31-39-75:~/linux-springboot/build/libs$ ps aux | grep java
ubuntu    378982  2.7 15.0 2785484 141228 pts/0  Sl   00:29   0:10 java -jar linux-springboot-0.0.1-SNAPSHOT.jar
ubuntu    379038  0.0  0.2   7076  2204 pts/0    S+   00:35   0:00 grep --color=auto java


백그라운드로 서버를 실행시켰기 때문에, 같은 터미널 창에서 명령어를 추가로 입력할 수 있었다.


5. 터미널 창을 끄더라도 잘 작동하는 지 확인
1) IP 주소로 접속
http://{EC2 인스턴스의 Public IP 주소}:8080 주소로 접속시 다시 접속이 되는 것을 확인할 수 있다.

2) 터미널 창 새로 켜서 리눅스 명령어로 확인
- Ubuntu

ubuntu@ip-172-31-39-75:~$ ps aux | grep java
ubuntu    378982  1.5 14.6 2785484 137240 ?      Sl   00:29   0:11 java -jar linux-springboot-0.0.1-SNAPSHOT.jar
ubuntu    379436  0.0  0.2   7076  2092 pts/0    S+   00:40   0:00 grep --color=auto java



6. 정리
서버를 실행시킬 때 24시간 내내 터미널 창을 켜놓을 수 없기 때문에, 서버 실행 후 터미널 창을 끄더라도 프로세스가 계속 실행되어야 한다. 이 때, 아래 명령어를 활용하여 백그라운드에서 프로세스를 실행한다.

nohup [프로그램을 실행하는 명령어] & : 백그라운드에서 프로세스를 실행


참고링크 : https://www.inflearn.com/course/%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90%EB%8F%84-%EC%9D%B4%ED%95%B4%ED%95%A0-%EC%88%98-%EC%9E%88%EB%8A%94-%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%9E%85

 

비전공자도 이해할 수 있는 리눅스 입문/실전| JSCODE 박재성 - 인프런 강의

현재 평점 5.0점 수강생 292명인 강의를 만나보세요. 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 '리눅스 입문' 강의를 만들어봤습니다! 리눅스를 처음 배우시는 분, Per

www.inflearn.com

댓글