거북이-https://velog.io/@violet_evgadn 이전완료

리눅스에서의 프로세스 관리 본문

Linux

리눅스에서의 프로세스 관리

VioletEvgadn 2023. 4. 5. 10:28

ps

◎ 명령어 ps

ps는 현재 프로세스의 목록 및 상태를 확인하는 명령어이다.

 

ps는 단독으로 사용하기보다는 옵션, 특히 "-ef"라는 옵션을 붙여 활용하며, 서버 측에서 실행되고 있는 프로세스가 많을 것이기 때문에 grep을 활용하여 프로세스 리스트 중 원하는 프로세스를 찾는 방식으로 많이 활용한다.

 

ps [Option]
ps 옵션
  • -a : 데몬 프로세스처럼 터미널에 종속되지 않은 모든 프로세스를 출력
  • -u : 특정 사용자의 프로세스 정보를 확인할 때 사용. 사용자를 지정하지 않으면 현재 사용자를 기준으로 정보 출력
  • -x : 로그인 상태에 있는 동안 완료되지 않은 프로세서들을 보여줄 때 사용
    • 유닉스 시스템에선 사용자가 로그아웃을 해도 프로세서가 계속 동작하게 할 수 있는데 이러한 터미널이 없음에도 실행되는 프로세서들을 -x 옵션을 통해 확인할 수 있음

 

  • -e : 커널 프로세스를 제외한 모든 프로세스를 출력
  • -f : 풀 포맷으로 모든 정보를 보여줌
    • Unix 스타일로 출력해주는 옵션으로 UID, PID, PPID 등이 표시됨

-a, -u, -x와 -e, -f 사이를 띄어놓은 이유가 있는데 ps 명령어는 주로 "ps -aux"나 "ps -ef" 2개 중 1가지 방법으로 활용하기 때문이다. 사실 ps -aux도 거의 안 쓰이고 ps를 사용한다면 대부분 ps -ef로 사용한다.

  • ps aux : 시스템에 동작중인 모든 프로세스를 소유자 정보와 함께 BSD 포맷으로 출력
  • ps -ef : 시스템에 동작중인 모든 프로세스를 Full Format으로 자세히 출력

 

ps -ef 예시

ps -ef만 입력했을 때 내용이 너무 많아 보기 편하게 하기 위하여 "grep /usr/bin"을 통해 /usr/bin을 포함하고 있는 프로세스들만 출력했다.

 

 

◎ ps 테이블 항목

ps -aux 테이블 항목

  • USER : 프로세스 소유자 이름
  • PID : 프로세스 식별번호(Identifier)
  • %CPU :  CPU 사용 비율의 추정치
  • %MEM : 메모리 사용 비율의 추정치
  • VSZ : K 혹은 페이지 단위의 가상 메모리 사용량
  • RSS : 실제 메모리 사용량
  • TTY : 프로세스와 연결된 터미널
    • TTY 값으로 ?가 들어간 경우 백그라운드 프로세스임을 의미함
  • STAT : 현재 프로세스 상태 코드
  • START : 프로세스 시작 시간 
  • TIME : 총 CPU 사용 시간
  • COMMAND : 프로세스 실행 명령
ps -ef 테이블 항목

  • UID : 프로세스 소유자 이
  • PID : 프로세스 식별 번호
  • PPID : 부모 프로세스의 식별 번호(부모 프로세스 PID)
  • C : 프로세스 우선 순위
  • STIME : 프로세스 시작 시간
  • CMD : 프로세스 실행 명령
  • TTY, TIME : 위에서 설명

kill

◎ 명령어 kill

명령어 kill은 프로세스를 강제로 종료하기 위해 사용되는 명령어이다.

 

"kill -l" 명령어를 통해 프로세스 시그널 종류를 출력할 수 있는데 한 번 확인해 보자.

위 시그널을 이해하기 위해선 kill의 사용법에 대해 먼저 알아야 한다.

kill -[시그널 번호] [PID]

위 사진에서 나타난 1부터 64까지의 시그널 번호는 kill 이후 옵션으로 줄 수 있는 값들을 의미하는 것이다.

 

조금 더 깊이 들어가 보자면 사실 kill 명령어는 프로세스를 강제로 종료하는 명령어가 아니다.

리눅스에서는 kill 명령어를 통해 프로세스를 지정한 뒤 신호(Signal)를 보내 제어할 수 있다.

이때 지정한 프로세스에 보내는 신호는 시그널 번호를 통해 지정할 수 있으며 시그널 번호에 따라 kill 명령어에 대한 프로세스 처리 방법 또한 달라짐을 유추할 수 있다.

 

추가적으로 만약 "kill -9" 명령어를 사용하고 싶다면 사실 "kill -SIGKILL"으로 시그널 번호가 아닌 시그널 정보를 직접 입력해 줘도 된다. 단지 이는 매우 불편하므로 시그널 번호를 입력하는 것이 거의 규격화된 것이다.

 

◎ 시그널 번호

대표적인 시그널은 아래와 같다. 하지만 굳이 외울 필요는 없고, 시그널 번호 9(SIGKILL)에 대해서만 잘 외워두자.

  • 1(SIGHUP) : 실행 중인 프로그램이 사용하는 설정 파일을 변경시킨 뒤 변화된 내용을 적용할 때 사용
  • 2(SIGNINT) : 현재 작동 중인 프로세스 동작을 멈출 때 사용
    • "CTRL + C"와 동일한 역할 수행
  • 9(SIGKILL) : 프로그램을 강제 종료할 때 사용
  • 15(SIGTERM) : 실행 중인 프로세스를 정상적인 방법으로 종료시키는 신호
    • kill 명령에서 신호를 지정하지 않을 경우 시그널 번호가 15로 지정되어 프로그램을 종료함(디폴트 번호)
    • kill -9는 컴퓨터 기기의 전원 버튼을 눌러 강제 종료하는 것이고 kill -15는 시작 > 시스템 종료를 눌러 컴퓨터를 원래 방식대로 종료시키는 것으로 생각하면 된다.
  • 20(SIGTSTP) : 실행 중인 프로세스를 중지하는 데 사용하는 신호
    • "CTRL + Z"와 동일한 역할 수행
    • -2는 "종료"시키는 것이고 -19는 "중지"시키는 것이다. 이는 생각보다 큰 차이인데 for문을 100번 돌리는 명령문에서 50번째에 "kill -2"를 입력하면 해당 프로세스는 종료될 것이지만 "kill -19"를 입력하면 50번째 for문에서 중지되었다가 실행 재개 신호를 주면 51번째 for문부터 계속해서 진행한다.
  • 18(SIGCONT) : 정지된 프로세스를 재실행
    • kill -19나 kill -20을 통해 정지된 프로세스를 다시 실행시킴

만약 특정 프로세스를 종료하고 싶을 경우 아래와 같이 명령어를 입력하면 될 것이다.

kill -9 [프로세스 PID]

프로세스 관련 기타 지식

◎ 서비스

서비스란 시스템과는 독자적으로 구동되어 제공하는 프로세스를 말한다.

즉, 처음 Linux를 구동시켰을 때는 없지만 설정이나 프로그램을 통하여 추가적으로 실행될 수 있는 프로세스를 말한다.

 

서비스는 대표적으로 웹 서버(httpd), DB 서버(mysqld), FTP 서버(vsftpd) 등이 존재한다.

 

서비스들은 ".service"라는 확장자명을 가졌으며 "/usr/lib/systemd/system" 디렉터리에 위치하고 있다.

 

가장 유명한 서비스는 아마 "httpd.service"가 아닐까 싶은데, HTTP Protocol을 지원하는 Daemon으로 HTML 파일을 전송할 수 있게 해주는 프로세스이다.

만약 httpd.service가 없다면 HTTP Protocol을 통해 클라이언트에게 HTML 파일을 보내줄 수 없으므로 웹 서버의 역할을 수행하지 못할 것이다. 따라서 리눅스를 웹 서버로 사용하기 위해선 무조건 httpd.service가 존재하고 실행되고 있어야 할 것이다.

 

서비스를 실행/종료/재시작시키는 방법은 아래와 같다.

# 서비스 시작
systemctl start [서비스이름]

# 서비스 종료
systemctl stop [서비스이름]

# 서비스 재시작
systemctl restart [서비스이름]

◎ 소켓

네트워크에 대해 공부했다면 소켓에 대해서도 이미 알고 있을 것이다.

리눅스에는 접속 대기 상태의 소켓이 이미 존재하고 있으며 항상 외부에서 커넥션 생성 요청이 오기를 기다리고 있을 것이다.

 

이 상태에서 외부에서 소켓에 서비스를 요청할 경우 systemd가 소켓을 구동한다.

네트워크에 빗대어 생각해 보자면 systemd가 접속 대기 상태의 소켓을 복사하여 새로운 소켓을 만든 뒤 커넥션을 생성하는 것이다.

 

이후 외부에서 요청이 끝나면 소켓도 종료될 텐데, 네트워크에 대해 공부했다면 알 수 있듯 접속 대기 상태의 소켓은 그대로 남아 있고 복사되어 외부 요청을 처리한 소켓이 종료되는 것이다.

 

소켓은 ".socket" 확장자명을 가지고 있으며 "/usr/lib/systemd/system" 디렉터리에 저장되어 있다.

 

◎ 백그라운드 프로세스 확인

현재 실행되고 있는 백그라운드 프로세스들 출력
jobs
백그라운드 프로세스 중 n번째 프로세스를 포그라운드 프로세스로 상태 변경
fg %n

백그라운드 프로세스를 포그라운드로 가지고 와 프로세스가 끝날 때까지 프로세스 수행 내용을 출력시키는 것이다.

포그라운드 프로세스 중 n번째 프로세스를 백그라운드 프로세스로 상태 변경
bg %n

 

◎ top

프로세스 목록 중 CPU 사용률이 높은 것부터 차례로 출력하는 명령어로 일정 시간마다 목록이 업데이트된다.

  • PID : 프로세스 식별자
  • User : 프로세스 소유자의 Username
  • PR : 우선순위. 20이 가장 높고 -20이 가장 낮다.
  • NI : 마이너스를 가지는 프로세스는 우선순위가 높음
  • VIRT : 가상 메모리 사용량(kb). SWAP + RES
  • RES : 사용된 물리 메모리 사용량(kb)
  • SHR : 사용된 공유 메모리 사용량(kb)
  • S : 프로세스 상태 값
    • S(Sleeping), R(Running), D(Uniterruptible Sleep), W(Swapped out process), Z(Zombies) 등의 상태가 존재함
      • W의 Swap out은 이전에 프로세스 전이도를 공부하며 배웠다
  • %CPU : 프로세스가 사용하는 CPU 사용율
  • %MEM : 프로세스가 사용하는 메모리 사용율
  • TIME+ : 프로세스가 실행된 시간
  • COMMAND : 실행된 명령어

Table 외에도 위의 Tasks, %CPU, MiB Mem, MiB Swap을 통해 실행 중인 프로세스 개수, CPU 사용 현황, 메모리 현황 및 스왑메모리 현황을 파악할 수 있다.

'Linux' 카테고리의 다른 글

RAID와 LVM  (0) 2023.04.10
디스크 관리  (0) 2023.04.05
SW 패키지 관리 & 압축  (0) 2023.04.04
Virtual Network editor(vmnetcfg)  (0) 2023.04.03
사용자와 그룹 관리  (0) 2023.02.16
Comments