리눅스 프로세스 관리
프로세스 관련 명령어
1) 프로세스 정보
1. ps
시스템에서 실행중인 프로세스에 관한 정보를 보여주는 도구
/proc 디렉터리 이하에 프로세스와 연관된 가상 파일시스템의 내용을 토대로 프로세스 정보를 출력.
옵션은 - 를 사용하지 않는 Unix 스타일, - 를 사용하는 BSD 스타일, -- 를 사용하는 GNU 스타일이 있음.
ps [options]
- 기본 프로세스 출력
a : 현재 사용자 프로세스 출력
x : 터미널과 연관된 프로세스만 출력
-A : 모든 프로세스 출력 (-e와 동일)
-e : 모든 프로세스 출력
-a : 세션 리더와 커미널과 연관되지 않은 프로세스를 제외하고 모든 프로세스를 출력 - 지정한 프로세스 출력
p : 지정한 PID 목록의 정보만 출력
-C : 지정한 프로세스의 실행 파일 이름의 정보만 출력
-u : 특정 사용자의 프로세스 정보를 출력 - 프로세스 표시 형식
u : 프로세스의 소유자 정보를 함께 출력
l : BSD 형식의 긴 형식으로 출력
e : 프로세스 정보와 함께 프로세스의 환경변수 정보도 출력
-l : 긴 포맷으로 출력
-o : 사용자 정의 형식 지정 가능 - 프로세스 장식
f : 프로세스 계층을 텍스트 형식의 트리구조를 보여줌.
-f : 전체 포맷으로 출력
- 현재 실행중인 모든 프로세스의 정보를 전체 포맷으로 출력
$ ps -ef UID PID PPID C STIME TTY TIME CMD 0 1 0 0 7:22PM ?? 0:29.37 /sbin/launchd 0 58 1 0 7:22PM ?? 0:02.12 /usr/sbin/syslogd 0 59 1 0 7:22PM ?? 0:01.02 /usr/libexec/UserEventAgent (System) 0 62 1 0 7:22PM ?? 0:00.55 /System/Library/PrivateFrameworks/Uninstall.framework/Resources/uninstalld 0 63 1 0 7:22PM ?? 0:03.86 /usr/libexec/kextd |
- 터미널에 연관되지 않은 프로세스를 포함한 모든 사용자의 프로세스를 소유자 정보와 함께 프로세스 정보를 출력
$ ps aux USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND hwa 1102 25.5 4.2 9342368 354960 ?? R 8:05PM 4:59.91 /Applications/Google Chrome.app/Contents/Frameworks/Google Chrome Framework.framework/Versions _windowserver 241 16.6 1.0 6888540 83192 ?? Ss 7:22PM 28:58.67 /System/Library/PrivateFrameworks/SkyLight.framework/Resources/WindowServer -daemon hwa 797 11.3 1.6 4925048 136324 ?? S 7:24PM 25:32.80 /Applications/Google Chrome.app/Contents/Frameworks/Google Chrome Framework.framework/Versions hwa 689 3.3 3.5 6606500 296016 ?? S 7:24PM 18:01.71 com.docker.hyperkit -A -u -F vms/0/hyperkit.pid -c 2 -m 2048M -s 0:0,hostbridge -s 31,lpc -s 1 hwa 789 1.8 3.4 5329508 288088 ?? S 7:24PM 7:18.83 /Applications/Google Chrome.app/Contents/MacOS/Google Chrome root 864 1.2 0.3 4339976 23348 ?? Ss 7:26PM 2:20.15 /usr/sbin/bluetoothaudiod |
ps명령어의 주요 항목
F | 프로세스 플래그 |
S | 프로세스 상태코드 |
UID | 프로세스 소유자이름 |
PID | 프로세스 고유식별자 |
PPID | 부모프로세스의 PID |
C | 프로세서 사용률 %로 표기 |
PRI | 프로세스의 우선순위. 높은값이 낮은 우선순위 |
NI | nice 값이며 19에서 -20값 |
SZ | 프로세스 이미지가 차지하는 물리적 페이지 크기 |
WCHAN | 대기중일때 커널 함수의 이름 |
STIME | 프로세스가 시작한 시간 |
TTY | 터미널의 종류 |
TIME | 총 CPU 사용시간 |
CMD | 프로세스의 실행 시 명령줄 |
프로세스 상태 코드
D | 인터럽트가 불가능한 대기상태로 일반적으로 입출력 시 의미 |
I | 커널 쓰레드가 유휴상태를 의미 |
R | 프로세스가 실행중이거나 실행 가능한 상태 의미 |
S | 인터럽트가 가능한 대기상태 |
T | 작업 제어신호에 의해 멈춤상태 |
t | 디버깅 중 디버거에 의해 멈춘상태 |
X | 프로세스 죽은 상태 |
Z | 좀비프로세스 |
< | 높은 우선순위 상태 |
N | 낮은 우선순위 상태 |
L | 페이지가 락된 메로리를 갖고있음 |
s | 세션 리더 |
| | 멀티 쓰레드 |
+ | 포어그라운드 프로세스 그룹 |
2. pstree
프로세스를 트리 형태로 출력
pstree [options]
-a | 프로세스 명령줄 인자 출력 |
-h | 현재 프로세스와 부모 프로세스를 강조 표시 |
-n | 프로세스 이름 대신에 PID순으로 정렬 |
-p | PID와 함께 출력 |
-s | 특정 프로세스의 부모 프로세스를 출력 |
3.top
시스템에서 현재 실행중인 프로세스에 대한 정보를 실시간으로 제공.
top [options]
-n | 지정한 숫자만큼 화면 출력을 갱신한후 명 |
-u | 지정한 사용자의 프로세스를 모니터링 |
-b | 출력결과를 파일이나 다른 프로그램으로 전달 |
-d | 화면갱신주기를 초 단위로 설정 |
-p | 지정한 PID 프로세스를 모니터링 |
2) 프로세스 종료
1. kill
프로세스에게 특정 시그널을 보냄.
시그널을 지정하지 않는경우 기본값으로 프로세스 종료를 위한 TERM 시그널을 보냄.
kill [options][pid]
-signal, -s signal | 지정한 시그널을 보냄 |
-l | 사용 가능한 시그널의 목록을 출력 |
2. killall
지정한 이름에 부합하는 모든 프로세스에게 시그널을 보냄.
시그널을 지정하지 않으면 SIGTERM 전송.
지정한 프로세스 이름에 매칭되는 프로세스가 모두 종료되므로 여러 프로세스를 띄우고 있는 데몬을 종료할 때 유용.
3. pkill
프로세스 이름과 지정한 패턴이 부합하는 프로세스만을 종료
pkill [options] pattern
3) 프로세스 전환
1. jobs
현재 실행중인 모든 잡 목록 출력
jobs [options][job name or number]
2. fg
백그라운드에 멈춰있던 잡을 포어그라운드로 보내 셸 프롬프트상에서 다시 실행하는 명령어
fg [job]
3. bg
포어그라운드의 잡을 백그라운드로 전환
bg [job]
4) 프로세스 우선순위
1. nice
프로세스의 우선순위를 의미하는 nice 값 설정.
이 값은 사용자 프로세스 사이 우선순위를 조정할 수 있고 프로세스의 스케줄링에 영향을 줄수있음.
높은우선순위 -20부터 낮은 우선순위 19 범위안에서 설정. 기본값은 0
nice [options][command arg]
bash의 nice 값을 10 감소한다
$nice --10 bash
2. renice
현재 실행중인 프로세스의 nice값을 변경.
renice [-n] priority [option]
3. nohup
일반적으로 시스템에서 로그아웃하면 로그아웃한 세션과 연관된 모든 프로세스에게
HUP 시그널을 보내서관련된 모든 프로세스는 자동으로 종료되지만,
nohup을 사용하면 해당 시그널을 가로채 무시하기 때문에 로그아웃하더라도 프로세스를 계속 실행.
nohup command
5) 프로세스 검색
1. pgrep
프로세스 이름 전체 또는 일부가 매칭되거나 특정 프로세스 속성을 기반으로
현재 실행중인 프로세스를 검색할 수 있는 명령어
pgrep [options][pattern]
프로세스 관련 파일
1) /proc 디렉터리
1. 설명
/proc 디렉터리는 커널 내 다양한 정보를 포함.
디스크상에 존재하는 실제 디렉터리는 아니며 procfs라는 가상의 파일시스템.
파일 접근 명령어를 통해 프로세스 뿐 아니라 시스템 정보를 조회할 수 있게 한다.
시스템이 부팅할때 자동으로 procfs가 /proc에 마운트 됨.
2. 프로세스 정보
프로세스는 고유 식별자인 PID가 /proc/PID 디렉터리 이하에 프로세스의 정보를 가짐.
/proc/self 에서 현재 프로세스 정보 확인.
프로세스의 메모리 맵 - 프로그램이 메모리에 적재되어 실행 중인 인스턴스를 프로세스라고 함. - 이러한 실행 프로그램과 라이브러리들이 메모리상에 자리 잡는다는 것이 프로그램이 메모리에 적제된다고 함 -> 메모리 맵 |
3. 시스템 정보
디렉터리 | 설명 |
/proc/cmdline | 부팅시 커널로드할 때 인자로 넘어온 옵션 정보 |
/proc/cpuinfo | CPU 제조사, 모델, 속도, 코어 개수 등 CPU 정보 |
/proc/devices | 현재 시스템에 로드된 디바이스 드라이버 목록 |
/proc/fb | 프레임 버퍼 정보 |
/proc/filesystems | 커널이 지원하는 파일시스템 목록 |
/proc/interrupts | 시스템에서 사용중인 인터럽트 정보 |
/proc/iomem | 메모리맵 I/O 정보 |
/proc/ioport | 포트 I/O 정보 |
/proc/kallsyms | 커널 심볼 정보 |
/proc/loadavg | 1분, 5분, 15분간 시스템의 평균 부하량 |
/proc/meminfo | 전체 메모리 크기, 캐시, 활성화, 비활성화 |
/proc/misc | 기타 장치의 정보 |
/proc/mounts | 마운트된 장치의 정보 |
/proc/partitions | 파티션 정보 |
/pro/stat | 시스템 상태 정보 |
/proc/swaps | 스왑파일 및 파티션의 크기와 사용량 및 우선순위 |
/proc/uptime | 시스템 동작시간 |
/proc/version | 리눅스 커널정보 |
/proc/
작업 예약
1) at
1. at 명령어
- 지정한 시간에 원하는 명령을 실행할 수 있음. 간단한 알림 메시지부터 복잡한 스크립트 등
- at 명령과 시간을 지정하여 실행하고 지정한 시간에 실행할 명령어를 입력한다. -> 입력 후 Ctrl+D
- 예약된 작업은 /var/spool/at 디렉터리에 개별 파일로 저장.
- 실행 결과는 /usr/sbin/sendmail을 통해 메일로 전송
- /etc/at.allow와 /etc/at.deny 환경설정 파일을 통해 at 명령어에 대한 접근제어가 가능.
at [optjions] time
5:22 PM에 my-jobs.txt의 명령어가 실행되고 출력결과는 모두 메일로 전송 $at -m 17:22 < my-jobs.txt 큐의 모든 작업을 출력 $at -l 큐의 작업을 삭제 $at -d 1 |
2. atq
현재 예약된 작업 목록을 확인하는 명령어. at -l과 동일
3. atrm
예약된 작업을 삭제. at -d 옵션과 동일
4. 사용자 접근제어
at 명령어는 기본적으로 root 사용자만 사용할수 있음.
/etc/at.allow 에 사용자 추가해 명령어 사용 허용가능.
2) 크론 cron
1. 설명
미리 정한 시간에 명령어, 프로그램, 작업 등을 실행할수 있는 서비스.
at 명령어는 단 1회만 예약시간에 작업 실행.
크론 서비스는 반복적으로 실행할 수 있음.
크론 데몬 crond와 예약작업 정보가 담겨있는 설정파일로 구성
2. 크론 동작방식
시스템 전역 사용 목적을 위한 /etc/crontab과 시스템 유틸 등 개별패키지에 의한 작업예약을 위한 /etc/crond,
개발 사용자를 위한 /var/spool/cron 파일을 감시
3. 크론 설정 파일
크론설정파일에 크론작업 정의 한다.
총 7개의 필드로 구성.
분, 시간, 일, 월, 요일, 사용자명, 실행할 명령어 순으로 기재
4. crontab 명령어
사용자가 반복적으로 수행할 작업을 예약할때 사용하는 명령어
crontab을 통해 실행한 vi를 통해 편집하는것을 권장.
/var/spool/cron 밑에 사용자 이름으로 파일 생성.
5. crontab 접근제어
at 명령어의 접근 제어와 동일
기본적으로 root 사용자만 사용함. cron.allow 나 cron.deny 파일에 사용자 추가하여 접근제어 가능.