[Centos 7] Process Management (프로세스 관련 명령어)

2022. 11. 20. 17:51리눅스(Linux)

$ jobs
   - 백그라운드로 실행중인 프로세스나 현재 중지된 프로세스 목록을 출력해줌

# jobs -l
   - 사용예제(-l 옵션은 PID 와 같이 출력)

 

$ fg

   - fg는 Background Process 를 foreground Process로 전환하는 명령어
   - Background Process 가 여러 개 존재할 경우 별도의 작업번호를 부여하지 않으면
   현재 수행중인(+기호가 붙은) 작업을 전환

# fg %작업번호 
   - 사용예제

 

$ bg

   - Foreground Process를 Background Process로 전환하는 명령
   - 보통 실행시키고 있는 Foreground Process 에서 CTRL + Z 키를 눌러 작업을 잠시
   중지시킨 후에 bg 명령어를 사용하여 작업을 백그라운드로 전환 함

# find / -name „*.txt‟ 2> /dev/null >list.txt 
CRTL + Z 
# bg 

# find / -name „*.txt‟ 2> /dev/null >list.txt & 
[1] 35432 
# 
   - 사용예제

$ ps

   - 현재 동작하고 있는 프로세스들의 상황(스냅샷)을 보여줌
   - 실시간으로 프로세스의 동작 상황을 확인하고 싶을 때는 top 명령어를 사용
   - Process 정보의 기본적인 내용은 proc 파일 시스템에 있는 stat 의 내용에서 가져온다

ps 명령어 주요 옵션
ps 명령어 주요 필드
STAT 필드 구성 요소

# ps -au 
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 
root 10842 0.0 0.2 1668 464 tty2 Ss+ 06:53 0:00 /sbin/mingetty tty2 
 
root 10843 0.0 0.1 1668 440 tty3 Ss+ 06:53 0:00 /sbin/mingetty tty3 
 
root 10867 0.0 0.1 1668 440 tty4 Ss+ 06:53 0:00 /sbin/mingetty tty4 
 
root 10868 0.0 0.1 1668 436 tty5 Ss+ 06:53 0:00 /sbin/mingetty tty5 
 
root 10870 0.0 0.1 1668 440 tty6 Ss+ 06:53 0:00 /sbin/mingetty tty6 
 
root 25362 0.0 0.6 5908 1536 tty1 Ss+ 13:44 0:00 -bash 
 
root 26551 1.4 0.6 5668 1456 pts/1 Ss 14:20 0:00 -bash 
 
root 26584 0.0 0.3 5288 888 pts/1 R+ 4:20 0:00 ps au  
   - 현재 실행 중인 전체 사용자 정보와 프로세스 시작 시간 등 출력
# ps -eo pid,state,nice,args | more 
 PID S NI COMMAND 
 1 S 0 init [5] 
 2 S - [migration/0] 
 3 S 19 [ksoftirqd/0] 
 4 S - [watchdog/0] 
 5 S - [migration/1] 
 6 S 19 [ksoftirqd/1] 
 7 S - [watchdog/1] 
 8 S -5 [events/0] 
 9 S -5 [events/1] 
 10 S -5 [khelper] 
 11 S -5 [kthread] 
    - 사용자가 정의한 형식(o)으로 모든 프로세스(e)를 보여줌

$ pstree

   - 현재 프로세스의 상황을 트리 형식으로 보여줌

pstree 명령어 주요 옵션

# pstree -np 
 
init(1)-+-migration/0(2) 
        |-ksoftirqd/0(3) 
        |-watchdog/0(4) 
        |-events/1(9) 
        |-khelper(10) 
        |-kthread(11)-+-xenwatch(13) 
        |             |-xenbus(14) 
        |             |-kblockd/0(17) 
        |-udevd(585) 
        |-auditd(9072)-+-{auditd}(9073) 
        |              `-audispd(9074)---{audispd}(9075) 
        |-syslogd(9097) 
        |-irqbalance(9112) 
        |-portmap(9134) 
        |-rpc.statd(9163) 
        |-rpc.idmapd(9200) 
        |-vmware-guestd(9591) 
   - PID 순으로 정렬하며, 프로세스명과 PID 출력

 

 

$ kill

   - 프로세스나 프로세스 그룹에게 지정된 시그널을 보내줌

주요 시그널

# kill PID 
   - PID 1234 프로세스에게 SIGTERM(기본값) 신호를 보냄

# kill -9 PID1 PID2 PID3 PID4 
   - 다수의 프로세스 강제종료(SIGKILL 옵션을 주어도 동일)

# kill -HUP 1234 
   - 프로세스를 정보를 다시 읽어들임
   
# kill %작업번호 
   - 작업번호 단위로 종료

$ killall

   - kill 명령은 다수의 경우 각각의 PID 값을 알아내고 모두 입력해야 하나 데몬에

   의해 동작되는 모든 프로세스에게 한번에 같은 시그널을 보낼 경우에 사용됨
   - 프로세스명 또는 데몬명으로 프로세스 종료시킴

 

# killall %작업번호 
   - 작업번호와 관련된 모든 프로세스 에게 SIGTERM 보냄

# killall -s SIGHUP sshd 
   - ssh 데몬에 대한 환경설정 리로드

$ skill

   - 주로 시스템에 접속해 있는 사용자 혹은 특정 터미널을 종료 시키는데 사용됨
   - 불필요한 접속자 혹은 공격자 등을 차단할 경우

# skill -KILL testuser1 
   - testuser1 이라는 사용자를 시스템에서 추방

# skill -KILL pts/0 
   - 특정 터미널인 pts/0 에 접속해 있는 사용자만 추방

# skill -STOP testuser1 
   - 특정 사용자를 정지 시킴

$ top

   - 현재 시스템의 프로세스 상태를 연속적으로 화면에 출력

   - 시스템의 상태를 전반적으로 가장 빠르게 파악 가능

   - 옵션 없이 입력 시 interval간격(기본 3)으로 화면을 갱신하며 정보를 보여줌

   - syntax : top [option]

옵션 내용
-d 화면 갱신 시간을 설정
-q 화면을 게속 갱신
-l idle상태화 zombie 프로세스를 무시
 

   - top 목록

PID 프로세스 ID
USER 소유자
PR 우선순위
NI Nice Value ( -20~19 사이의 값으로 작을수록 우선순위 )
VIRT 프로세스가 사용하고 있는 virtual memory의 전체용량
RES 현재 프로세스가 사용하고 있는 물리적 메모리의 양
SHR 다른 프로세스와 공유하고 있는 shared memory의 양
S 현재 프로세스의 상태
%CPU CPU 사용 시간 퍼센트
%MEM 메모리 사용 퍼센트
TIME 프로세스가 시작해 사용한 총 CPU 시간
COMMAND 프로세스를 실행한 명령어 라인

 

$ top 실행 중의 명령어 옵션

- SPACE : 화면을 갱신

- ? : 도움말 출력

- W : 바꾼 설정을 저장

- P : CPU 사용률 내림차순 정렬
- M : 메모리 사용률 내림차순 정렬
- N : 프로세스 ID 기준으로 정렬
- T : 프로세스가 돌아가고 있는 시간 순 정렬
- R : 오름차순과 내림차순을 토글 변경
- H : 스레드 기준으로 정렬
- k : kill. k 입력 후 PID 번호 작성. signal은 9
- f : sort field 선택 화면 -> q 누르면 RES순으로 정렬
- a : 메모리 사용량에 따라 정렬
- b : Batch 모드로 작동
- 1 : CPU Core별로 사용량 보여줌

$ nice

   - 프로세스의 우선순위를 변경하는 명령어. NI값 설정 가능

   - NI값은 20 ~ 19까지, 값이 작을수록 우선순위 높음

   - 일반사용자는 증가만 가능, 기본값은 0

   - syntax : nice -[] [프로세스명]

$ renice

   - 실행중인 프로세스의 우선순위를 변경할 때 사용하는 명령어

   - 소유자와 root만 명령 가능

   - syntax : renice [option] PID

옵션 내용
-g 그룹 ID 지정
-u 사용자 ID 지정
-p 프로세스 ID 지정 ( 초기값 )
 

$ nohup

   - 사용자가 로그아웃하거나 터미널 창을 닫아도 해당 프로세스를 백그라운드로 작업될 수 있도록 해주는 명령

   - 백그라운드와 다르게 프로그램을 데몬의 형태로 실행시키기 때문에 로그아웃으로 세션이 종료되어도 프로그램은 종료되지 않음

   - syntax : nohup [명령]

   - nohup [명령어] & : 해당 프로그램이 백그라운드로 실행

 

$ lsof

   - List Open Files의 약자로 시스템에서 열린 파일 목록을 알려주고 사용하는 프로세스, 디바 이스 정보, 파일의 종류 등 상세한 정보를 출력한다

   - 리눅스와 유닉스는 추상화된 파일 시스템(VFS - Virtual File System)을 사용하므로 일반 파일, 디렉터리, 네트워크 소켓, 라이브러리, 심볼릭 링크 등도 모두 파일로 처리되며 lsof 에 서 상세한 정보를 확인할 수 있다

   - 시스템에서 동작하고 있는 모든 프로세스에 의해 열려진 파일들에 대한 정보를 보여주는 시스템 관리 명령어이다. (일반유저의 접근을 허용하지 않도록 permission을 700이나 100 으로 변경하는 것이 보안상 좋다)

   - lsof는 리눅스,AIX,Solaris,FreeBSD,MAC OS X 등 종류에 상관없이 일관된 옵션과 출력 형식을 갖는 장점이 있다.

   - syntax : lsof [option] [file]

*열린 파일(Open Files) : 디스크, 네트워크 소켓, 파이프, 장치 및 프로세스

옵션 내용
-a 파일을 선택하는데 AND 연산으로 대상을 출력
-c 지정한 command 필드만 출력
-F 지정한 구분자로 필드를 구분하여 출력
-g 지정한 그룹 아이디를 사용하는 관련 프로세스 출력
-i 현재 사용되는 소켓 정보를 출력
-l 로그인 사용자명 대신에 UID를 출력
-n 호스트명 대신 IP주소를 출력
-p 포트 서비스명 대신 포트 번호 출력
-r 지정한 초의 주기로 반복해서 출력 ( 디폴트 값은 15)
-s 파일의 크기를 출력
-V 보다 상세한 정보를 출력
 
 

 

 

COMMAND : 실행한 명령어

   - ‘systemd’ 명령어를 실행하여 파일을 열었음을 알 수 있음

PID : process id

   - 실행된 Process에게 부여된 ID를 알 수 있음

   - *’systemd’의 경우 항상 1번 Process ID를 부여받음

USER : 실행한 사용자

   - root’에서 실행했음을 알 수 있음

FD : File Descriptor, (파일 서술자 / 파일 기술자), 프로세스가 특정 파일에 접근할 때 사용하는 추상적인 값

   - cwd : current working directory

   - rtd : root directory

   - mem : memory-mapped file

   - txt : program text (code and data)

TYPE : 파일 종류

   - DIR : 디렉터리

   - CHR : character special file

   - REG : regular file

   - unix : 유닉스 도메인 소켓

   * MySQL 등이 사용하는 소켓으로 로컬 프로세스에서만 사용 가능하며 TCP/UDP 보다 속도가 매우 빠름

DEVICE : 장치 번호

SIZE/OFF: 파일의 크기나 오프셋

NODE : 노드 번호

NAME : 파일명

 
 
$ Netstat
   - 들어오고 나가는 네트워크 패킷을 통계와 인터페이스 통계를 모니터링하기 위한 명령줄 도구
   - syntax : netstat [option]
옵션 내용
-a 모든 소켓 표시
-t TCP socket만 표시
-u UDP socket만 표시
-n 호스트, 포트 번호 등의 이름 확인을 하지 않고 숫자로 표시
-p 소켓을 사용하고 있는 프로세스의 ID 표시
-r 라우팅 테이블 표시
-l 연결 대기 상태인 소켓만 표시
 

$ IOTOP

   - 리눅스 디스크 I/O 사용 세부 정보를 모니터링하고 시스템의 프로세스 또는 스레드별로 기존 I/O 사용률 테이블을 출력하는 쉬운 방법을 제공하는 top명령과 유사한 명령어

 

옵션 내용
-h 도움말
-o I/o가 발생중인 프로세스만 출력
-b 배치모드
-n num 반복횟수 지정
-p pid 특정 프로세스에 대한 정보 출력
-d sec 업데이트 주기 설정 ( 기본 : 1)
-u user 특정 유저 모니터링
-a 실행한 시점부터 누적되는 readwrite량 측정
-p 스레드는 제외하고 프로세스만 출력

 

TID : 스레드 ID

prio : I/O 우선 순위 클래스/레벨

user : TID

disk read : 초당 디스크 읽기

disk write : 초당 디스크 쓰기

swapin : 스와핑하는 동안 스레드가 소비한 시간의 백분율

IO> : 스레드가 I/O를 기다리는 데 소비한 시간의 백분율

command : 스레드가 실행 중인 명령

 

$ lostat

   - 시스템 입력 및 출력 저장 장치 통계를 수집하고 표시하는 간단한 도구

   - 장치, 로컬디스크, NFS와 같은 원격 디스크를 포함한 저장 장치 성능 문제를 추적

   - syntax : iostat [옵션] [출력시간] [횟수]

옵션 내용
-c cpu 사용량 정보
-d disk 사용량 정보
-k 블락 단위에서 킬로바이트로
-m 블락 단위에서 메가바이트로
-p 파티션 당 통계 포함
-t 타임 스탭프 출력
-x 확장 정보
-z 활동 0인 것 제외

 

%user : CPU가 사용자 모드에서 사용된 시간의 비율의 출력값 입니다.

%nice : 작업 우선순위 정책에 의하여 우선순위가 바뀐 프로세서가 사용한 시간의 비율을 출력하값 입니다.

%system: CPU가 시스템 모드에서 사용된 시간의 비율을 출력한 값 입니다.

%iowait : 디스크의 입출력을 대기하는데 사용된 시간의 비율을 출력한 값입니다.

* %idle과 다르며 iowait가 높은경우 메모리 부족이나 비효율적인 I/O부시스템이 구성되어 있음을 의미

%steal : Steal CPU의 사용시간을 비율로 출력한 값 입니다.

%idle : 디스크의 입출력을 대기하지 않은 유휴상태의 시간을 출력한 값입니다.

%idle과는 다르며 ioswait가 높은경우 메모리 부족이나 비효율적인 I/O부 시스템이 구성되어 있음을 의미

tps : 디스크 장치에서 초단 처리한 입출력의 잡업 개수 입니다.

kB-read/s : 디스크 장치에서 초당 읽어들인 데이터 블록 단위입니다.

kB_wrtn/s : 디스크 장치에서 초당 쓴 데이터 블록 단위 입니다.

kB_wrtn : 디스크 장치에서 쓴 데이터 블록 단위