Linux

Linux 프로세스 관련 명령어

Namiz_IT 2024. 7. 21. 17:18

 

 리눅스 시스템에서 실행되는 모든 프로그램은 하나 이상의 프로세스(process)로 구성된다. 프로세스는 시스템에서 수행되는 작업 단위이며, 각 프로그램 실행 시 생성된다. 리눅스는 이러한 프로세스를 확인하고 관리하기 위한 다양한 명령어를 제공한다.

 

ps : 시스템에서 실행 중인 프로세스 정보를 표시한다.
pgrep : 정규 표현식과 일치하는 프로세스의 ID(PID)를 목록 형식으로 출력한다.
top : 시스템 리소스를 많이 사용하는 프로세스를 실시간 모니터링한다.
uptime : 시스템 부하(load) 상태를 출력한다.
w : 모든 사용자의 활성 프로세스 목록을 출력한다.
free: 시스템의 사용 가능한 메모리 정보를 출력한다.

 

프로세스 vs 작업(job)

  • 프로세스: 운영체제 자체의 개념이며, 시스템에서 수행되는 실제 작업 단위이다.
  • 작업(job): 특정 쉘에서만 인식하는 개념으로, 하나 이상의 프로세스를 그룹핑하여 관리하는 논리적 단위이다.

좀 더 자세히 알아보기

  • /proc 디렉토리: 커널과 관련된 정보를 포함하는 특수 디렉토리이며, 각 프로세스에 대한 상세 정보가 포함되어 있다.
  • 쉘 작업 제어: 쉘에서 제공하는 명령어를 사용하여 백그라운드 실행, 작업 중지/시작/종료 등을 관리하는 기능이다.

ps 명령어

 리눅스 시스템에서 실행 중인 프로그램은 하나 이상의 프로세스(process)로 구성된다. ps 명령어는 시스템 상에서 실행되고 있는 프로세스에 대한 정보를 표시하는 데 사용된다.

ps 명령어는 다양한 옵션을 지원하며, 이 글에서는 몇 가지 유용한 조합에 대해 살펴보자.

 

ps 명령어 사용 방법

ps [옵션]
  • 옵션: 출력 형식이나 필터링 조건 등을 설정하는 옵션 (선택사항)

예시 1 : 기본 정보 출력

ps -ux
  • ps: 프로세스 정보를 표시하는 명령어
  • -u: 사용자별 프로세스 정보 표시
  • x: 종료된 프로세스 제외하고 모든 프로세스 표시

위 명령어는 시스템에서 실행 중인 모든 프로세스에 대한 정보를 다음과 같은 형식으로 출력한다.

PID TTY      TIME CMD
4706 pts/2    00:00:01 bash
15007 pts/2  00:00:00 emacs
...
  • PID: 프로세스 식별 번호 (Process ID)
  • TTY: 프로세스가 연결된 터미널
  • TIME: 프로세스가 실행된 시간
  • CMD: 명령어 이름 (실행 중인 프로그램)

예시 2 : 특정 사용자 프로세스 보기

ps -U smith
  • ps : 프로세스 정보를 표시하는 명령어
  • -U : 사용자 이름으로 프로세스 필터링
  • smith : 프로세스 소유자가 "smith"인 사용자의 프로세스만 표시

예시 3 : 특정 프로그램 프로세스 보기

ps -C python
  • ps : 프로세스 정보를 표시하는 명령어
  • -C : 프로그램 이름으로 프로세스 필터링
  • python : "python" 프로그램 실행 중인 모든 프로세스 표시

예시 4 : 특정 터미널 프로세스 보기

ps -t N
  • ps : 프로세스 정보를 표시하는 명령어
  • -t : 터미널 번호로 프로세스 필터링
  • N : 프로세스가 연결된 터미널 번호 (예: ps -t 2)

예시 5 : 특정 프로세스 보기

ps -p 1,2,3505
  • ps : 프로세스 정보를 표시하는 명령어
  • -p : PID로 프로세스 필터링
  • 1,2,3505 : comma(,)로 구분하여 프로세스 식별 번호 (PID) 지정

예시 6: 명령어 줄 전체 출력

ps -ef
  • ps : 프로세스 정보를 표시하는 명령어
  • -e : 모든 프로세스 표시
  • -f : 전체 명령어 줄 출력 (기본값은 명령어 앞부분만 표시)

예시 7 : 프로세스 계층 구조 보기

ps -efH
  • ps : 프로세스 정보를 표시하는 명령어
  • -e : 모든 프로세스 표시
  • -f : 전체 명령어 줄 출력
  • -H : 프로세스 계층 구조 보기 (부모 프로세스 아래 자식 프로세스 들Indented 출력)

예시 8: ps 명령어 출력 필터링

ps -ux | grep python
  • ps -ux : 프로세스 정보 출력
  • grep python : 파이프라인 (|)을 이용하여 ps 명령어의 출력 결과에서 "python" 문자열을 포함하는 라인만 필터링하여 출력

주의사항

ps 명령어는 옵션이 매우 많다. 여기서는 몇 가지 유용한 예시만 소개했다.


pgrep 명령어

pgrep 명령어로 프로세스 검색 및 관리

리눅스 시스템에서 실행 중인 프로그램은 하나 이상의 프로세스(process)로 구성된다. pgrep 명령어는 이러한 프로세스를 정규 표현식(regular expression)을 이용하여 검색하고, 해당 프로세스의 식별 번호(PID)를 출력하는 데 사용됩니다. (pidof 명령어는 정규 표현식 대신 고정된 문자열을 사용하여 프로세스 검색)

 

pgrep 명령어 사용 방법

pgrep [옵션] 정규 표현식
  • opção: 검색 조건이나 출력 형식 등을 설정하는 옵션 (선택사항)
  • 정규 표현식: 검색할 프로세스 이름과 일치하는 패턴

예시 1 : 실행 중인 python 프로세스 PID 확인

pgrep python

위 명령어는 시스템에서 실행 중인 모든 "python" 프로그램 프로세스의 PID를 출력한다.

 

예시 출력:

4675 79493 82866 83114

 

예시 2 : 실행 중인 python 프로세스 개수 확인

pgrep -c python
  • pgrep : 프로세스 검색 명령어
  • -c : 검색 결과 개수만 출력

위 명령어는 시스템에서 실행 중인 "python" 프로그램 프로세스의 개수만 출력한다.

 

예시 3 : 특정 사용자 프로세스 검색

pgrep -u smith
  • pgrep: 프로세스 검색 명령어
  • -u: 사용자 이름으로 프로세스 필터링
  • smith: "smith" 사용자 소유의 프로세스만 검색

예시 4 : pgrep 명령어와 다른 명령어 함께 사용

ps -fwp $(pgrep python)
  • pgrep python: 정규 표현식을 이용하여 "python" 프로그램 프로세스의 PID 목록 얻기 (명령어 치환 사용)
  • ps -fwp: PID 목록을 이용하여 해당 프로세스에 대한 상세 정보 출력

위 명령어는 두 단계로 구성된다.

  1. pgrep 명령어를 사용하여 "python" 프로그램 프로세스의 PID 목록을 얻는다. (명령어 치환을 이용하여 pgrep 명령어의 결과를 변수처럼 사용)
  2. ps 명령어와 함께 PID 목록을 사용하여 해당 프로세스에 대한 상세 정보를 출력한다.

pgrep 활용법

pgrep 명령어는 검색된 프로세스의 PID 목록을 다른 명령어에 전달하여 활용할 수 있다. 예를 들어, "pgrep"과 "kill" 명령어를 함께 사용하여 프로세스 종료에도 활용할 수 있다.


top 명령어

 

top 명령어로 리눅스 시스템 리소스 모니터링

리눅스 시스템에서 실행 중인 프로그램들은 서로 리소스를 공유하며 동작합니다. top 명령어는 시스템에서 가장 많은 리소스를 사용하는 프로세스를 실시간으로 모니터링하는 데 사용됩니다. top 명령어는 일정 간격 (기본적으로 3초)마다 화면을 업데이트하여 시스템 상태를 살펴볼 수 있습니다.

 

top 명령어 실행

top

 

top 명령어 출력 정보

top 명령어를 실행하면 다음과 같은 시스템 정보를 확인할 수 있다.

  • 시스템 uptime : 최근 부팅 이후 경과 시간
  • 사용자 : 로그인한 사용자 수
  • 작업 : 총 프로세스 수, 실행 중인 프로세스 수, 대기 중인 프로세스 수, 멈춘 프로세스 수
  • CPU 사용률 : 전체 CPU 사용률 (us: 사용자, sy: 시스템, ni: nice, id: 유휴, wa: 대기)
  • 메모리 사용량 : 총 메모리, 사용 가능한 메모리, 사용 중인 메모리
  • 스왑 사용량 : 운영 체제가 메모리가 부족할 때 사용하는 가상 메모리 공간입니다. 하드 디스크의 일부 영역을 사용하여 메모리 확장 기능을 제공한다.
  • 프로세스 정보: 프로세스 ID (PID), 사용자, nice 값, 가상 메모리 사용량, 실제 메모리 사용량, 상태 (%CPU: CPU 사용률, %MEM: 메모리 사용률, TIME: 실행 시간), 명령어

예시 : 일부 프로세스 정보만 표시됨

PID USER PR NI VIRT SHR S %CPU %MEM TIME CMD
26265 smith 20 0 1092 840 R 4.7 0.2 0:00 top
1 root 20 0 540 472 S 0.0 0.1 0:07 systemd
914 www  0 0  0  0 SW 0.0 0.0 0:00 httpd
...

 

top 명령어 인터랙티브 기능

top 명령어 실행 중에는 키보드 단축키를 이용하여 다양한 기능을 수행할 수 있다.

  • h : 도움말 - 사용 가능한 키 목록 표시
  • q : 종료 - top 명령어 종료
  • s : 업데이트 간격 설정 - 화면 업데이트 간격 조정
  • i : 유휴 프로세스 숨기기 - 실행 중이지 않은 프로세스 숨기기
  • k : 프로세스 종료 - 특정 프로세스 종료 (주의 필요)

시스템 리소스 모니터링 도구

top 명령어 외에도 시스템 리소스를 모니터링하는 데 유용한 도구들이 있다.

  • iotop : 시스템 I/O 사용량 모니터링
  • iftop : 네트워크 대역폭 사용량 모니터링
  • btop : CPU, 디스크, 프로세스, 네트워크 인터페이스 정보를 한 화면에 통합하여 표시하는 도구

uptime 명령어

리눅스 시스템에서 uptime 명령어는 최근 부팅 이후 시스템이 실행된 시간을 확인하는 데 사용됩니다.

 

uptime 명령어 출력 정보

uptime 정보
  • uptime 정보:
    • 현재 시간 (예: 10:54pm)
    • 시스템 uptime (예: 8 days, 3:44) - 최 recent 부팅 이후 경과 시간
    • 로그인한 사용자 수 (예: 3 users)
    • 시스템 부하 평균 (load average) (예: 0.89, 1.00, 2.15) - 1분, 5분, 15분 단위로 실행 대기 프로세스 평균 개수

uptime 명령어 예시

10:54pm up 8 days, 3:44, 3 users, load average: 0.89, 1.00, 2.15

 

위 예시에서

  • 현재 시간 : 10:54pm
  • 시스템 uptime : 8일 3시간 44분
  • 로그인한 사용자 수 : 3명
  • 시스템 부하 평균 : 최근 1분 0.89, 5분 1.00, 15분 2.15 (실행 대기 프로세스 평균 개수)

시스템 부하 평균 (load average)

 uptime 명령어는 시스템 부하 평균을 출력한다. 시스템 부하 평균은 특정 시간 간격 (보통은 1, 5, 15분) 동안 실행 대기 상태였던 프로세스의 평균 개수를 나타낸다. 낮은 시스템 부하 평균은 시스템이 여유롭게 작동하고 있음을 의미하며, 높은 시스템 부하 평균은 시스템 리소스 부족을 예고할 수 있다.


w 명령어

 리눅스 시스템에서 여러 사용자가 동시에 접속하여 작업을 수행할 수 있다. w 명령어는 시스템에 현재 로그인 되어 있는 모든 사용자에 대한 정보를 표시한다.

 

w 명령어 실행

w

 

w 명령어 출력 정보

w 명령어를 실행하면 다음과 같은 정보를 확인할 수 있다.

  • 시스템 uptime: 최근 부팅 이후 경과 시간, 로그인 사용자 수, 시스템 부하 평균 등 (uptime 명령어와 동일)
  • 사용자 정보:
    • 사용자 이름 (USER)
    • 터미널 이름 (TTY)
    • 연결 원격 호스트 또는 X display 이름 (FROM) - 해당 사항이 없으면 : 0 표시
    • 로그인 시간 (LOGIN@)
    • 유휴 시간 (IDLE) - 마지막 키 입력 이후 경과 시간
    • CPU 사용 시간 (JCPU, PCPU) - 자세한 내용은 man w 참조
    • 현재 실행 중인 프로세스 (WHAT)

예시 : 일부 사용자 정보만 표시됨

10:51pm up 8 days, 3:42, 8 users, load average: 2.02, 3.79, 5.44
USER     TTY      FROM LOGIN@   IDLE JCPU PCPU WHAT
barrett pts/0    :0  Sat 2pm  27:13m 0.07s 0.07s emacs
jones   pts/1  host1 6Sep03  2:33m 0.74s 0.21s bash
smith   pts/2  host2 6Sep03  0.00s 13.35s 0.04s w

 

w 명령어 옵션

  • -h : 헤더 정보 (시스템 uptime) 표시하지 않음
  • -f : 연결 원격 호스트 또는 X display 이름 (FROM) 표시하지 않음
  • -s : CPU 사용 시간 (JCPU, PCPU) 표시하지 않음
  • username : 특정 사용자 정보만 표시

w 명령어 간단 출력

간략한 정보만 확인하고 싶은 경우 w -hfs 옵션을 사용하면 다음과 같은 형식으로 출력된다.

USER TTY      WHAT
barrett pts/0 emacs
jones   pts/1 bash
smith   pts/2 w

free 명령어

리눅스 시스템에서 실행되는 프로그램들은 메모리를 사용하여 작업을 수행한다. free 명령어는 시스템의 메모리 사용량을 확인하는 데 사용된다.

 

free 명령어 실행

free

 

free 명령어 출력 정보

free 명령어를 실행하면 다음과 같은 메모리 사용량 정보를 확인할 수 있다.

  • Mem : 총 메모리 (total)
    • used : 사용 중인 메모리
    • free : 사용 가능한 메모리 (free 컬럼보다는 available 컬럼을 참조하는 것이 좋음)
    • shared : 공유 메모리 사용량
    • buf/cache : 커널 버퍼와 캐싱에 사용되는 메모리 (buf/cache 컬럼)
    • available : 실제 사용 가능한 메모리 (free 컬럼보다는 available 컬럼을 참조하는 것이 좋음)
  • Swap: 총 스왑 메모리 용량
    • used: 사용 중인 스왑 메모리 용량
    • free: 사용 가능한 스왑 메모리 용량

주의 :

  • free 명령어의 출력에서 free 컬럼보다는 available 컬럼을 실제 사용 가능한 메모리 양으로 판단하는 것이 좋다.
  • buf/cache 컬럼은 커널이 캐싱 목적으로 사용하는 메모리 양을 나타낸다.

왜 available 컬럼을 사용해야 할까?

 리눅스 시스템에서는 커널이 시스템 성능 향상을 위해 일부 메모리를 캐싱합니다. free 명령어의 free 컬럼은 단순히 할당되지 않은 메모리 양만을 표시하기 때문에, 실제로 사용할 수 있는 메모리 양을 정확하게 반영하지 않는다.

 available 컬럼은 캐싱을 위해 사용되는 메모리 양을 고려하여 실제 사용 가능한 메모리 양을 보여준다. 따라서 시스템의 실제 메모리 사용 상태를 파악하기 위해서는 available 컬럼의 값을 참조하는 것이 좋다.


문서 참조

https://www.oreilly.com/library/view/linux-pocket-guide/9781098157951

반응형

'Linux' 카테고리의 다른 글

LinuxLinux 파일 속성 관련 명령어 #2  (0) 2024.07.21
Linux 사용자 그룹 관리 명령어  (0) 2024.07.21
Linux 파일 검색 명령어  (0) 2024.07.21
Linux 파일 속성 관련 명령어 #1  (0) 2024.07.21
Linux 계정 관련 명령어  (0) 2024.07.20