Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Tags
more
Archives
Today
Total
관리 메뉴

개발자공부일기

AWS배포하기 프로세스가 종료되지 않는 문제 본문

TIL(Today I Learned)

AWS배포하기 프로세스가 종료되지 않는 문제

JavaCPP 2024. 11. 21. 21:08

관리자권한과 일반 권한으로 각각 실행하면 같은게 ㅔ2개 실행된다.

 

pm2로 내가 만든 간단한 페이지를 서버에서 실행하는 실습을 하던 중 프로세스를 종료했음에도 웹페이지에 계속 접속이 가능했다. 분명히 pm2 list 에는 실행중인 프로세스가 없었고 pm2 delete 0 으로 종료를 했었다.

그래서 ps -ef | grep app 명령어로 실행되고 있는 프로새스중 app가 포함된이름의 프로세스가 있는지 조회하니

떡하니 있는게 아닌가. 분명 종료했었는데 있었다. 그래서 kill PID 명령어로 종료시켜봤으나 계속 새로운 PID로 실행되고 있었다. 근데 알고보니 내가 실습중 관리자 권한으로 하나 실행해둔게 있었는데 그게 문제였다. 일반권한으로 실행된 app(1)과 관리자 권한으로 실행된 app(2)가 있었던 것. 일반권한으로 실행된 app(1)만 종료하고 조회도 일반권한으로 조회하면 일반권한으로 실행된 프로세스만 나와서 못찾고 있었던거다. sudo pm2 list를 하니 못찾던 프로세스가 나왔고

sudo pm2 delete 0을 하니 웹페이지 접속이 드디어 끊겼다. Ctrl + C로 접속을 종료하고 마무리했다.

 

다음은 저 과정을 거치며 알게 된 명령어들이다.

 

ls: 내 위치의 모든 파일을 보여준다.

pwd: 내 위치(폴더의 경로)를 알려준다.

mkdir [폴더 이름]: 내 위치 아래에 새 폴더를 만든다.

cd [폴더 이름]: 나를 해당 폴더로 이동시킨다.

cd .. : 나를 현재 위치의 상위 폴더로 이동시킨다.

cp -r [복사할 파일/폴더] [붙여넣기 할 위치]: 복사 붙여넣기

rm -rf [지울 파일/폴더]: 지우기 (이 명령은 매우 위험합니다. 신중히 사용해주세요!)

# 명령어 사용 당시에만 관리자 권한이 부여됩니다.
sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다.

# 명령어 사용 이후 모든 명령이 관리자 권한으로 실행됩니다.
sudo su: 관리자 권한이 있는 계정으로 접속한다. (exit 입력하면 관리자 계정에서 로그아웃)

 

 

ps 명령어

ps는 현재 실행 중인 프로세스 목록을 출력하는 명령어입니다.

  • 기본적으로 현재 터미널과 관련된 프로세스만 보여줍니다.
  • 다양한 옵션과 함께 사용하면 특정 조건의 프로세스를 확인할 수 있습니다.

ps 주요 옵션 설명

  1. ps -e
    • 설명: 모든 프로세스를 출력합니다.
    • 표현 방식: ps -A와 동일합니다.
ps -e ps -A

 

 
  1. ps -f
    • 설명: 프로세스를 풀 포맷(full format)으로 출력합니다.
      • UID(사용자 ID), PID(프로세스 ID), PPID(부모 프로세스 ID), C(CPU 사용률), STIME(시작 시간), TTY(터미널), TIME(CPU 시간), CMD(명령어) 등
ps -f

 

 

  1. ps -l
    • 설명: 긴 포맷(long format)으로 출력합니다.
      • F(플래그), UID, PID, PPID, PRI(우선순위), NI(니스 값), ADDR, SZ, WCHAN, TTY, TIME, CMD 등.
ps -l
  1. ps -p
    • 설명: 특정 PID(프로세스 ID)에 해당하는 프로세스를 출력합니다.
ps -p <PID>

ps -p 1234
  1. ps -u
    • 설명: 특정 사용자(User)의 프로세스를 출력합니다.
ps -u <사용자이름>

ps -u root
 

추가로 많이 사용하는 옵션

  • ps aux:
    모든 사용자와 시스템의 프로세스를 자세히 출력합니다.
    • a: 터미널과 관련 없는 프로세스도 출력.
    • u: 사용자 및 프로세스 정보를 더 자세히 표시.
    • x: 세션과 독립적으로 실행되는 프로세스 출력.
ps aux | grep apache
 
  • ps -ef:
    전체 프로세스를 풀 포맷으로 출력합니다.
    • e: 모든 프로세스.
    • f: 풀 포맷.
ps -ef | grep sshd

sshd라는 문구가 들어간 프로세스가 모두 출력된다.

 

KILL

kill 명령어는 프로세스를 종료하거나 특정 신호(Signal)를 전달할 때 사용됩니다. 프로세스 ID(PID)를 기준으로 동작하며, 일반적으로 ps, top, 또는 pgrep 명령어와 함께 사용됩니다.


기본 사용법

kill [옵션] <PID>
  • <PID>: 종료하려는 프로세스의 ID.
  • 옵션 없이 사용: 기본적으로 SIGTERM(종료 요청) 신호를 보냄.

주요 신호와 옵션

  1. kill -9 <PID>
    • 설명: 강제로 프로세스를 종료합니다.
    • 전달 신호: SIGKILL (9번 신호).
    • 특징: 프로세스가 시스템 자원을 해제할 기회 없이 강제로 종료됨.
kill -9 1234
  1. kill -15 <PID>
    • 설명: 프로세스에 정상 종료 요청을 보냅니다.
    • 전달 신호: SIGTERM (15번 신호, 기본값).
    • 특징: 프로세스가 종료 신호를 수신하고 스스로 종료 준비를 함.
 
kill -15 1234
  1. kill -1 <PID>
    • 설명: 설정 파일을 다시 로드하도록 요청합니다.
    • 전달 신호: SIGHUP (1번 신호).
    • 특징: 프로세스를 종료하지 않고 설정 파일을 리로드할 때 사용.
kill -1 1234
  1. kill -0 <PID>
    • 설명: 프로세스가 실행 중인지 확인합니다.
    • 특징: 실제로 신호를 보내지 않고 PID가 존재하는지 확인만 합니다.
kill -0 1234

프로세스 찾기와 종료 예시

  1. ps와 함께 사용:

프로세스 확인:

ps aux | grep <프로세스명>
 

프로세스 종료:

kill <PID>
  1. pgrep와 함께 사용:

특정 프로세스 찾기 및 종료:

kill $(pgrep <프로세스명>)

예: apache2 프로세스 종료:
kill $(pgrep apache2)
 
  1. top 명령어와 함께 사용:

top 실행:

top
 

종료할 프로세스의 PID를 확인 후, k를 누르고 PID를 입력해 종료.


전체 프로세스 종료 예시

특정 사용자 프로세스 종료:

killall -u <사용자명>

 

특정 이름의 프로세스 종료:

 
killall <프로세스명>

신호의 번호와 이름

  • 주요 신호:번호이름설명
    1 SIGHUP 설정 파일 다시 로드
    2 SIGINT 인터럽트 (Ctrl+C)
    9 SIGKILL 강제 종료
    15 SIGTERM 정상 종료 요청 (기본값)
    0 (없음) 프로세스 확인만 수행

주의사항

  • kill -9은 강제 종료이므로 사용에 주의하세요. 데이터 손실 가능성이 있습니다.
  • 신호를 보낼 수 없거나 무응답인 경우 권한 문제일 수 있으니 sudo를 사용하세요:
     
sudo kill -9 <PID>

 

이 마지막 코드를 더 빨리 알았더라면 거기에 시간을 안쏟아도 됐는데..

'TIL(Today I Learned)' 카테고리의 다른 글

Prisma  (0) 2024.11.25
RDBS, MySQL  (0) 2024.11.22
1주차 서버와 클라이언트/ 웹 어플리케이션서버와 게임서버  (0) 2024.11.20
Node.js 간단한 메모장 만들기  (0) 2024.11.20
Node.js 2일차  (0) 2024.11.19