🪄 문제점
ssh 접속한 터미널을 종료시키면, 터미널에서 실행한 프로그램도 함께 종료된다.
예를 들어 ssh 접속 후 python3 test.py로 py를 돌려놓은 뒤 터미널을 끄면 py 프로그램도 꺼진다.
🪄 이유
SIGHUP(signal hang up) 때문이다. 이는 hang up 즉 접속을 끊을 때, 터미널과 연결이 끊어졌을 때의 시그널이다. 그래서 현재 세션 종료를 통해 SIGHUP 시그널을 쭈루룩 전달받은 프로세스는 종료된다.
다음은 해결 방법이다.
🪄 SIGHUP 시그널 피하기! (백그라운드로 실행)
백그라운드로 실행하여 내가 원하는 프로세스가 SIGHUP을 받지 않도록 하면 된다. 그러한 명령어인 nohup가 있다. 나는 bert_server.py가 SIGHUP을 받지 않도록 백그라운드로 실행하고자 한다.
nohup은 현재 사용자 세션이 아닌 OS가 제공하는 백그라운드 공간에서 프로세스를 실행할 수 있게 한다.
nohup [명령어] &
내 py를 백그라운드로 돌리려면 nohup python3 ./bert_server.py & 를 입력하자.
그렇게 nohup 명령 사용시 nohup: ignoring input and appending output to 'nohup.out' 라고 뜬다. forground로 실행했을 때 처럼 터미널 화면에 출력될 내용이 nohup.out에 기록된다. cat nohup.out으로 내용을 확인해보면 내 플라스크 앱이 잘 떴음을 확인 가능하다.
참고로 맨뒤에 붙는 &는 백그라운드로 명령어를 실행하라는 것이다. nohup 명령어 & 수행 후 pid를 띄워준다.
이후 jobs로 확인 한번 해보면 내 프로세스가 잘 돌아가고 있다.
'컴퓨터구조 & OS' 카테고리의 다른 글
[가상메모리:SWAP] 건드리면 터지는 2GB 서버에 서비스올리기 (0) | 2024.04.27 |
---|---|
[운영체제] Process Control Block(PCB) (0) | 2023.10.06 |
[운영체제] 프로세스 상태도 (2) | 2023.09.28 |
[운영체제] 프로세스 스케줄링: 멀티프로그래밍 vs 타임쉐어링 (0) | 2023.09.27 |
[python] gpu(cuda) 프로세스 정리하기 (0) | 2023.09.12 |