nohup : 서버 백그라운드 실행 & port kill 하기

Ruah·2024년 10월 4일

nohup를 사용하는 이유

1. 터미널 종류 후에도 프로세스 지속 실행.

  • nohub는 no hang up의 약자로, 터미널 세션이 종료되더라도 프로세스가 중단되지 않고 계속 실행되도록 함.
  • 일반적으로 터미널에서 프로레스를 실행하면 해당 터미널이 닫힐 때 프로세스도 함께 종료
  • 서버나 장시간 실행되어야하는 작업의 경우, 터미널을 닫아도 프로세스가 계속 실행되길 원할 때 nohup을 사용
nohup uvicorn main:app --reload --host 0.0.0.0 --port 8000 

# 혹은
nohup uvicorn main:app --reload --host 0.0.0.0 --port 8000 &

2. &의 사용 유무

2-1. nohup만 사용한 경우 (&을 사용하지 않은 경우)

  • 포그라운드 실행 : 프로세스가 포그라운드에서 실행되며, 터미널에서 해당 프로세스의 출력을 바로 확인 가능
  • 터미널 제어 불가 : 프로세스가 종료되기 전까지는 해당 터미널에서 다른 작업을 수행 불가.

2-2. nohup과 &을 함께 사용한 경우

  • 백그라운드 실행: 프로세스가 백그라운드에서 실행되어 터미널을 즉시 반환가능
  • 터미널 사용 가능 : 프로세스가 백그라운드에서 실행되므로 터미널에서 다른 작업 계속 가능

따라서, 백그라운드 실행을 원한다면 nohup과 함께 &을 사용.

nohup uvicorn main:app --reload --host 0.0.0.0 --port 8000 &
  • 이렇게 한다면 프로세스가 백그라운드에서 실행되고, 터미널을 즉시 반환받아 다른 작업 수행 가능

포트에서 실행중인 프로세스 종료 방법

서버를 재시작 하거나 해당 포트를 사용하는 프로세스를 종료해야 할 때가 있다. 다음은 특정 포트에서 실행중인 프로세스를 찾아 종료하는 방법이다.

1. 사용중인 포트의 PID 찾기

1-1. lsof 명령어 사용

  • lsof : 열린 파일 목록을 보여주는 명령어(네트워크 포트도 포함)
# 포트 8000을 사용중인 프로세스 찾기
lsof -i :8000
  • 출력 예시 :

1-2. netstat와 grep 사용

  • netstat 을 사용하여 포트를 확인
netstat -tulnp | grep :8000
  • 출력 예시 :

2. 프로세스 종료

  • 찾은 플세스의 PID를 사용하여 프로세스를 종료
# 프로세스 종료
kill 654171

#강제 종료가 필요한 경우
kill -9 654171

3. 해당 포트를 사용하는 프로세스를 찾아 바로 종료 시켜주는 fuser

fuser -k 8000/tcp
  • 해당 포트를 사용하는 프로세스를 찾아 알아서 종료
  • 출력 예시 :
profile
집요한 주니어 개발자의 호되게 당했던 기록

0개의 댓글