프로세스
- 커널에 관리하에 현재 시스템에서 동작중인 프로그램
프로그램 -> 하드디스크 저장
프로세스 -> 메모리(RAM) 저장
운영체제의 작업 단위
- 커널은 프로세스를 관리하기 위해서 각 프로세스에 PCB를 할당
PCB ( Process Control Block )
- 프로세스 고유 번호 (PID)
- 우선 순위 (Priority)
- 현재 상태 (Current Status)
- 프로세스 제어하기 위한 여러 정보가 저장되어 있다.
프로세스의 종류
부모(Parent) 프로세스
- 다른 프로세스를 생성하며,init 프로세스를 제외한
모든 프로세스는 부모 프로세스를 가지고 있다,(최상위 디렉토리와 같음)
자식(Child) 프로세스
- 부모 프로세스의 의해 생성된 프로세스이다
- 작업을 완료하면 결과를 부모 프로세스에게 전달을하고 종료된다.
고아(Orphan) 프로세스
- 자식프로세스보다 먼저 부모 프로세스가 종료됐을 때 자식 프로세스는
고아프로세스가 되어 init 프로세스가 관리하게된다
좀비(Zombie) 프로세스
- 자식 프로세스의 종료 신호를 부모 프로세스가 처리하지 못할 경우
자식 프로세스는 좀비 프로세스가 된다.
실제로 사용되는 프로세스의 공간이 작아지기 때문에 직접 종료해야한다.
init 프로세스
- 부팅 시 가장 먼저 실행되어 시스템에 전반적인 설정을 초기화하는 프로세스
모든 프로세스가 init 프로세스의 자식 프로세스가 된다.
데몬 프로세스
- 사용자에게 특정 기능이나 서비스를 제공하는 프로그램
http, ftp, dns, ssh, mail...
데몬의 동작 형태
1. standalone
- 독립적으로 메모리에 항상 상주해 있는 형태로
리소스 소모는 많지만 응답속도가 빠른 형태이다.
2. xinet
- 데몬을 관리하는 데몬이라고 하여 슈퍼데몬이라고 하는
xinetd에 의해 실행되는 형태이다.
- 사용자의 요청이 있을 때만 실행되기 때문에
리소스 소모는 적지만 응답속도가 느린 형태이다.
- 예전에 하드웨어의 용량이 많지 않을 때 사용하던것.
#PS(Process Status)
- 프로세스의 상태를 확인
-e 모든 프로세스를 리스트 형태로 출력
-f (full format) 완벽한 형식(다양한 필드)으로 출력
-a 다른 사용자들의 프로세스도 출력
-u 사용자 이름, 시간 등 상세한 출력
-x 현재 실행되고 있는 모든 프로세스를 출력
옵션들은 크게 중요하지 않으니 차이만 알면 된다.
강제 종료: kill, killall
- "좀비프로세스" 같은 경우는 강제로 종료해야한다
- 프로세스를 죽이는 명령어가 아니라 신호를 발생하는 명령어이다.
- windows에서 작업관리자의 기능과 같다.
- 부모 프로세스를 없애면 자식 프로세스들은 다 없어진다.
kill -l (신호의 종류 확인)
- 앞에 SIG가 붙어있다. 9)번에 있는 SIGKILL이 신호를 강제로 종료하는 명령어이다.
- 루트 사용자일지라도 프로세스를 마음대로 종료시킬 수 없다.
중요한거 몇가지.
2) SIGINT // 프로세스 종료 -> Ctrl+c
9) SIGKILL // 프로세스 종료 -> 강제
15) SIGTEAM // 프로세스 종료->기본값
18) SIGCONT // 프로세스 재시작
19) SIGSTOP // 프로세스 중지 -> Ctrl+z
-s sigspec | -n signum 둘중 하나만 입력하면 된다. 이름을 입력해도 되고 번호를 입력해도 된다.
ps -ef 명령어를 통해 프로세스의 모든 리스트를 출력해보자.
출력된 리스트 중 -bash(로그인)를 종료시켜보겠다.
부모 PID인 1293을 종료시키면 된다.
kill -9 1293 을 입력하면 자동으로 로그아웃되는것을 확인할 수 있다.
windows 에서의 강제종료는 작업관리자에서 할 수 있다. 리눅스의 kill 명령어와 같다.
프로세스의 종류에는 2가지가 있다
1) 포그라운드 프로세스(앞)
: 사용자가 입력한 명령이 실행되어 결과가 출력될 때 까지 기다려야 하는 포그라운드 방식으로 처리되는 프로세스
ex) $sleep 100
2) 백그라운드 프로세스(뒤)
: 명령을 실행하면 명령의 처리가 끝나는 것과 관계없이 곧바로 프롬프트가 출력되어 사용자가 다른 작업을 할 수 있음
ex) $sleep 100&
- 리눅스 : 데몬
- 윈도우즈 : 서비스
Ctrl + z : 포그라운드를 백그라운드로 보내고 다시 포그라운드로 보낼 준비가 되어 있다.
& : 실행할 때 백그라운드로 실행하여 포그라운드와 백그라운드를 같이 사용할 수 있다.
jobs [%작업번호] : 백그라운드 작업을 모두 보여준다.
bg[%작업 번호] : 백그라운드로 전환
fg [%작업 번호] : 포그라운드로 전환
ping 127.0.0.1을 입력하면 계속 출력값이 나온다. Ctrl+z를 통해 백그라운드로 보낸다
같은 방법으로 3 번을 반복한다
그런 후 jobs 명령어를 통해 현재 상태를 확인해보면 3개가 실행된 것을 알 수 있다.
#ping 127.0.0.1 & 을 입력하면 Ctrl +c 를 눌러도 멈추지 않는다. 멈추기 위해선 kill 명령을 해주어야 한다.
위와같이 총 5개를 만들고 5번은 아직 실행중인것을 알 수 있다.
백그라운드에 있는것을 포그라운드로 끌어내고 그런 뒤에 하나씩 kill을 해줘야 한다.
숫자가 PID가 아닌 작업번호를 의미하는 %를 붙여 제거할 수 있다.
#sleep [] 는 괄호안에 입력한 숫자(초)만큼 대기하는 프로세스이다.
이러한 경우 긴 시간동안 다른 명령어를 실행할 수 없기 때문에 다른 프로세스를 실행하려면
아래 사진처럼 프로세스를 중지시키거나 다른 shell을 실행시키면 된다.
세션 1에서 위와 같이 입력한다.
세션 2에서 #pstree를 입력하여 세션1에서 동작하고 있는 프로세스를 트리구조 형태로 출력하여
부모/자식 관계를 직관적으로 확인할 수 있다.
이름이 동일한 프로세스를 한번에 종료하고 싶을 땐 위와 같이 #pkill [프로세스] 를 입력하면 된다.
/proc/meminfo - 메모리 정보
/proc/cpuinfo - CPU정보
/proc/version - 커널 정보
#uptime
13:03:39 up 1:22, 3 users, load average: 0.00, 0.00, 0.00
[현재 시간] [부팅시간] [접속자수] [평균 부하 최근 5분 10분 15분]
CPU코어 1개 -> 부하 1.0 -> CPU %100 사용중 (정상적인 상태)
-> 부하 2.0 -> CPU %100 사용중 (대기하고 있는 프로세스 1개)
2개 -> 부하 1.0 -> CPU %50 사용중
'Linux' 카테고리의 다른 글
Linux 파일 시스템 (0) | 2018.02.05 |
---|---|
Linux 예약 작업 (2) | 2018.02.02 |
Linux 패스워드 정책 (0) | 2018.01.31 |
Linux (ACL , sudo) (0) | 2018.01.30 |
Linux 권한(속성) (0) | 2018.01.29 |