[Linux] 프로세스 종류 , 명령어
프로세스
- 하드에 저장된 실행코드가 메모리에 올라(load) 작동 중(활성화)인 프로그램
- 예를 들어 게임을 구동할 때 아이콘을 더블클릭하면 하드에 저장된 파일을 불러오며 화면에 loading....이 나오다가 게임이 켜지는 것을 볼 수 있다.
- 포그라운드 프로세스(FP) : 파워포인트, 크롬, 게임프로그램 -> 화면에 띄어져서 사용자가 직접 구동
- 백그라운드 프로세스(BP) : 알약, 네트워크, 파일저장소관리, HTTP, DNS 운영체제가 알아서 구동
- 프로세스 번호 : 메모리에 로딩되어 활성화된 프로세스를 관리하는 번호 (임의로 배정) -> 강제 종료 시 활용
- 작업번호 : 현재 실행되는 백그라운드 프로세스의 순차 번호(jobs)
- 부모 프로세스 / 자식 프로세스 : 만약에 파이어 폭스를 실행하기 위해서는 X-windows가 실행 되야 파이어 폭스가 실행된다.
- X-windows : 부모프로세스
- 파이어 폭스 : 자식 프로세스
ps (Process State) : 현재 프로세스 상태를 확인
옵션
ps –ef | grep 필터
유닉스계열 : ps -elf
BSD계열 : ps aux
kill : 응답없거나 필요없는 프로세스를 강제로 종료
kill -9 프로세스 번호 : 무조건 종료
pstree : 부모/자식 프로세스 관계를 보여준다.
pstree –h : 실행 명령어 진하게 보여준다.
pstree -a : 명령 행 인자(옵션)까지 보인다.
- USER : 프로세스 구동한 사용자
- PID : 프로세스 번호
- %CPU : CPU 사용률
- %MEM : 메모리 사용률
- RSS : 프로세스가 사용중인 물리적 메모리 크기
- TTY : 사용중인 터미널
- STIME(START) : 프로세스 시작 시간
- TIME : 실행시간
- COMMAND(CMD) : 명령어(프로그램 이름)
컴퓨터를 사용하다 보면 죽지 않는 프로세스를 좀비 프로세스라고 부른다. 이것은 수시로 발견해서 kill -9으로 강제 종료를 시켜야 한다.
좀비 프로세서는 프로그램을 구동 중에 강제로 종료 하던지 / 인터넷을 하다가 웹페이지를 강제로 종료하면 자주 생긴다.
awk : 특정 문자열 추출 (파라미터)
$2 -> 2번째 필드값
== “Z” -> 대문자Z를 찾아라
{pinrt $0} -> 파라미터를 출력해라
- yes > /dev/null : null 장치에 yes를 넣어라(무한루프)
- ps –elf | grep yes : yes 필터링 해서 프로세스 자세히 출력 -> pid 보인다.
- kill -9 pid : 죽었음... (포그라운드에서 강제 종료 : 컨트롤 + c)
- 프로세스 번호가 아닌 이름으로 프로세스를 종료
- -I : 대소문자 구분 없이 프로세스 이름 일치
- -g : 프로세스 그룹
- -y : 지정된 시간 보다 이전 프로세스 종료시간을 본다
- -o : 지정된 시간 보다 이후 프로세스 종료시간을 본다
- -i : 종료전에 확인 요구
- -ㅣ: list(모든 알려진 시그널 이름
- -v : 시그널이 성공적으로 전송될경우 보고
- -w : 프로세스 종료 될때 까지 대기
프로세스에게 어떤 이벤트의 발생을 알리기 위해 전달되는 소프트웨어 인터럽트
kill -l
1 : Hangup : HUP (접속이 끊겼을때 / 로그아웃 )
2 : INT(키보드로부터 오는 인터럽트 시그널 중지)
ctrl-c
3 : QUIT(실행중지)
CTRL-\
9 : KILL (강제 종료)
15 : TERM(Terminate) : 정상 종료
18 : Cont(Continue) : STOP을 다시 진행한다.
19 : STOP : 정지 시그널
20 : TSTOP : 실행 정지(suspend) 후 다시 실행 (포그라운드를 백그라운드로 전환 )
ctrl + z
항목의 의미
PID : 프로세스 ID / USER : 사용자 /PR : 우선순위 / NI :nice값 /VIRT :가상메모리 크기 /RES : 실제 메모리 크기 /%cpu : cpu 사용률 / %mem 메모리 사용률
옵션 : h (도움말)
Enter/Spacebar : 갱신 일시 중지(즉시 다시 출력)
u : 사용자 별로 출력 (사용자 필터)
M :메모리별 정렬 /p: cpu용량 정렬 / k : 프로세스 종료
프로세스의 우선순위 값을 의미한다.
기본적으로 0값을 갖는다. (사용자가 설정)
-20 ~ 19까지 값을 변경할 수 있으며 작을 수록 우선권을 갖는다.
root 사용자는 ni값을 증감이 가능
(감소 : 우선순위를 증가 / 증가 : 우선순위를 감소)
일반 사용자는 ni값을 증가만 가능
증가 : 우선순위를 감소 (뒤로 미는)
renice
주로 pid를 활용해서 우선순위를 조절을 한다
기존 값을 무시하고 적용이 된다
-20 ~10 까지 사용
root 사용자만 증감 가능 / 일반사용자는 우선순위(값은 증가)감소만 가능하다
서비스 : 데몬이라고 부르는 프로세스로 컴퓨터가 켜져있는 동안에 24시간 지속적으로 활동하고 있는 프로세스 (network / httpd / named) => standalone 방식
소켓 : 접속하려고 할 때 구동되는 프로세스로 예를 들어 ftp서비스를 자주 사용되지 않는데 누군가가 접속을 했을 때만 구동하도록 셋팅 할 수 있다. (리소스 낭비를 최소화 한다)
과거에는 inet / xinetd 라고 부름
하나의 프로세스가 다른 프로세스를 실행하기 위한 방법
fork : 리눅스 부팅시 발생하는 데몬 프로세스 / 새로운 프로세스를 위해 메모리를 할당 받아 복사본 형태의 프로세스를 실행하는 형태로 기존 프로세스는 그대로 실행되어 있다.
시스템과 독자적으로 구동 및 제공되는 프로세스
웹서비스 httpd / DB : mariad /ftp : vsftpd
실행 및 종료
systemctl start /stop /restart 서비스 이름
서비스 스크립트 파일
/usr/lib/system/system/*.service 파일로 존재
부팅시 자동 실행 (enable)
확인법 :systemctl list-unit-files
서비스는 항상 가동 중 !
소켓은 외부에서 특정 서비스를 요청시에만 system 에서 구동을 진행한다
그리고 요청이 끝나면 소켓도 종료됨
소켓은 접속시 로깅이 좀 길고 사용자 입장에서는 느리다라는 느낌을 받을 수 있지만 항상 가동 하지 않기 때문에 리소스는 여유 있게 구동한다.
왜냐하면 system 가 서비스를 새로 구동하는 시간이 소요된다 (telnet/ftp)
소켓과 관련된 파일은 서비스와 동일
대신 확장자가 *.socket
시스템 업데이트를 진행하는데 시간이 너무 많이걸려 로그오프가 되어도 업데이트를 해야 되는 경우가 많다. -> nohup
명령어 뒤에 & 표시를 하면 백그라운드로 실행해라.
명령어 뒤에 &를 붙이면 백그라운드로 작업한다.
백그라운드로 작업하면 작업 번호가 보인다.
bg : 백그라운드 작업을 볼 수 있다.
jobs : 백그라운드 작업 중 순서를 볼 수 있다.
실습 예제 : yes 무한루프를 백그라운드로 실행 -> gedit &
2개의 백그라운드 작업
gedit를 포그라운드로 실행 : fg 2 -> gedit 종료
yes 무한 루프를 포그라운드로 실행 : fg 1 -> 일시정지 (ctrl + z)
yes 무한 루프를 백그라운드로 실행 : bg 1 -> jobs 확인
실무예제 : 압축을 하거나 압축을 풀때 시간이 오래 걸리는 파일에 대한 백그라운드 실행을 진행 해보자. -> dnf -y update &