티스토리 뷰

정확히는 리눅스에서 프로세스를 실행하는 과정에서 발생하는 문제다.

 

만약 AWS EC2에서 서버 배포 시, 포어그라운드(foreground)에서 Spring boot로 구현한 jar를 실행시켜버리면 해당 서버에서 아무것도 할 수 없게 된다.

 

이런식으로 Spring 서버가 실행되며 아무런 동작도 할 수 없게 된다.

그리고, 로그인된 서버 세션이 끊어지게되면, 해당 프로세스도 종료되게 된다. 이런 문제를 해결하기 위해서 리눅스에서는 백그라운드에서 프로세스를 실행시킬 수 있게 해놨다.

 

1. 프로세스 백그라운드 실행 명령어

nohup 명령어를 쓰면 된다.

 

nohup 명령어는 접속된 서버의 세션이 끊어져도 그 프로세스가 계속 유지되도록 하는 명령어인데, 여기서 프로세스가 백그라운드에서 게속 떠있게끔하는 설정이 있다.

nohup java -jar demo-0.0.1-SNAPSHOT.war &

명령어 끝에 & 를 넣으면, 프로세스를 백그라운드에서 띄워주는 옵션을 사용하게 된다.

 

여기서, nohup으로 실행한 프로세스의 로그는 별도의 위치를 지정해주지 않으면 /home/ubuntu/nohup.out에 저장된다.

 

nohup.out 파일을 생성하지 않으려면 표준 출력과 표준에러를 /dev/null 로 지정 해주면 된다.

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

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

 

2. 백그라운드 프로세스 종료 명령어

프로세스가 백그라운드에 떠 있기 때문에 일반적인 종료 방법으로는 종료할 수 없다.

 

1. ps -ef로 프로세스의 pid(process id)를 알아낸다.

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

2. pid를 알아낸 후

# 프로세스 정상 종료
kill -15 [pid]

# 프로세스 강제 종료
kill -9 [pid]

kill은 프로세스를 종료하는 명령어이다.

 

-15 옵션은 하던 작업을 모두 안전하게 종료하는 절차를 밟고, 메모리상에 있는 데이터와 각종 설정/환경 파일을 안전하게 저장한 후 프로세스를 종료한다.

 

그러나 -9 옵션은 프로세스를 강제 종료 작업중인 모든 데이터를 저장하지 않고 프로세스를 종료하기 때문에 저장되지 않은 데이터는 소멸되느 권장되지 않는 종료 방법이다. 

 

다만, 정상적으로 종료되지 않을 때는 -9 옵션을 써서라도 종료를 해야 재시작이 가능하다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함