프로세스는 Program in execution(실행 중인 프로그램)이다.
이 프로세스는 Memory(주기억장치)에 위치한다.
부모 프로세스(Parent proc)
자식 프로세스(Child proc)
--> 프로세스 간에 계층적인 구조로 이루어져 있다.
--> 확인하기 위해 #pstree -p 라는 명령어를 사용한다. (p 옵션은 중복된 프로세스의 숫자를 출력하지 않는 것)
프로세스의 종류
1) 데몬(daemon) 프로세스 : daemon은 유령, 도깨비를 뜻함 --> 메모리에 상주하면서 서비스 요청을 대기하는 프로세스, 요청이 들어오면 처리
2) 고아(orphan) 프로세스 : 부모 프로세스가 자식 프로세스가 먼저 종료, 자식 프로세스의 정상 종료가 어려움
3) 좀비(zombie) 프로세스 : 자식 프로세스가 종료된 후 부모 프로세스에 의해서 제거되기 전까지의 프로세스 상태, 모든 프로세스가 짧은 좀비 상태 거쳐서 제거, 부모 프로세스가 정상이 아닌 경우 (응답없음) : 자식 프로세스 제거하지 않음
프로세스 실행 방법
1) 포그라운드(Foreground) : 앞마당
- 기본값
- # cmmand
- 하나의 프로세스가 끝나야 다른 프로세스 실행 가능, Ctrl + C로 중지
2) 백그라운드(Background) : 뒷마당
- 서비스 데몬
- # command &
# jobs : 현재 작업을 확인하는 명령어 (아래는 명령어 실행 결과)
[1]+ Running ./myprog &
작업 번호, 상태, 백그라운드로 돌아가는 중
# fg %작업번호 --> 백그라운드 작업을 포그라운드로 전환하는 명령어
# bg %작업번호 --> 포그라운드 작업을 백그라운드로 전환하는 명령어
Ctrl + Z : 포그라운드 작업을 일시 정지
# sleep 10 --> 10초동안 대기하라는 명령어
프로세스 정보 모니터링
1) # ps
# ps -ef (-e : every, -f : full)
# ps aux
PID : 프로세스 번호 (고유 번호이므로 절대 겹치지 않음)
STIME : 시작 시간
TTY : 터미널에 대한 정보
TIME : 마지막 수행 시간 (대부분의 경우 0에 가까움)
CMD : 프로세스 이름에 해당하는 정보
%CPU : CPU 사용률
%MEM : 메모리 사용률 (free라는 명령어로 전체 memory에 관한 정보를 볼 수 있음)
VSZ : Virtual Size (물리적인 메모리 RAM + 가상 메모리 양 합친 것)
RSS : Regist Set Size (물리적인 메모리 RAM)
프로세스 정보 모니터링
2) # top : 주기적(3초)으로 cpu 사용률이 높은 순으로 정렬하여 프로세스 목록 보여줌
Ctrl + C 누르면 중단
프로세스 종료
프로세스에 문제가 발생했을 때 유일한 장애처리 --> 프로세스 잘 종료
signal : 사용자/프로세스가 다른 프로세스에게 전달하는 신호 또는 메시지
# kill -l : 시그널 종류 확인
2) SIGINT (interrupt) : 실행 중단
포그라운드 프로세스에게 interrupt 시그널을 전달하는 단축키 --> Ctrl + C
3) SIGQUIT : 프로세스 종료 전에 덤프(core_ 파일) (운영자들은 잘 안 씀)
9) SIGKILL : 무시할 수 없는 시그널, 강제 종료 (무슨 상황에도 종료해야 될 때)
--> 프로세스 디스크 I/O
--> 파일 고장 가능성 있음
15) SIGTERM (terminate) : 정상 종료 (기본값)
참고) kill dash nine 이라는 노래도 있다.
# pgrep : 프로세스 번호를 쉽게 알 수 있는 명령어
$(command) : 치환, command가 명령의 실행 결과로 바뀐다.
# kill $(pgrep myprog) -----> # kill 3066 이 될 것이다.
앞서 말한 kill은 인수로 프로세스 번호만을 줘야 했는데,
pkill이라는 명령어는 인수로 프로세스의 이름을 주면 된다.
- kill
- cron (automation)
이 두 가지가 프로세스 관리에서 가장 중요한 부분이다.