본문 바로가기
개인 공부/Linux (CentOS 리눅스)

CentOS 리눅스 : 프로세스 관리 (6장)

by 희조당 2022. 5. 4.
728x90

■ 프로세스의 개념

 프로세스란? 시스템에서 실행 중인 프로그램.

 리눅스는 기본적으로 다중 프로세스 시스템

 

 - 프로세스의 부모-자식 관계

 리눅스의 모든 프로세스는 부모-자식 관계 (ex. 셸에서 vi 실행 → 부모 : 셸, 자식 : vi)

 자식 프로세스는 할 일이 끝나면 부모에게 결과를 돌려주고 종료한다.

 

 - 프로세스의 번호

 PID란? 각 프로세스의 고유 번호. 1번부터 시작해서 프로세스 실행마다 증가된다.

 

 - 프로세스의 종류

 1. 데몬 프로세스 : 특정 서비스 제공용. 평소에 대기하다가 요청 시 동작. 커널에 의해 실행된다.

 2. 고아 프로세스 : 부모 프로세스가 먼저 종료된 경우. 1번 프로세스가 부모가 되어 종료를 돕는다.

 3. 좀비 프로세스 : 종료되었는데도 프로세스 테이블 목록에 있는 경우. 부모가 종료 정보를 제대로 처리하지 않아 발생

 3. 좀비 프로세스 : 부모를 종료시켜 고아 프로세스로 만들어 처리한다. 

■ 프로세스 관리 명령

 - 프로세스 목록 확인

 ps [옵션] : 현재 실행 중인 프로세스 정보 출력

 -e : 시스템에서 실행 중인 모든 정보 출력

 -f : 자세한 정보 출력

 -u [userid] : 특정 사용자에 대한 프로세스 정보 출력

 -p [PID] : pid로 지정한 특정 프로세스의 정보를 출력

 a : 터미널에서 실행시킨 프로세스의 정보를 출력 

 u : 프로세스 소유자 이름, CPU 사용량, 메모리 사용량 등 상세 정보를 출력

 x : 시스템에서 실행 중인 모든 프로세스의 정보를 출력

 --pid PID [목록] : 목록으로 지정한 특정 PID 정보를 출력

 

 - 특정 프로세스 정보 검색

 pgrep [옵션] [패턴] : 지정한 패턴과 일치하는 프로세스 정보 출력

 -x : 정확히 일치하는 정보 출력

 -n : 패턴을 포함하는 가장 최근 정보 출력

 -u [사용자 이름] : 특정 사용자에 대한 모든 정보 출력

 -l : PID와 프로세스 이름 출력

 -t term : 특정 단말기와 관련 프로세스 정보 출력

 

 - 프로세스 종료

 강제로 프로세스를 종료하면 PID를 알아야 한다. (ps -ef ps aux 명령 사용)

 시그널이란? 프로세스에서 무언가 발생했음을 알리는 메시지. 미리 정의된 상수로 나타낸다.

  (kill -l 명령으로 알 수 있다!)

 

 kill [-시그널] [PID] : 지정한 시그널을 프로세스에게 보낸다.

 2 : 인터럽트 시그널 (ctrl + c)

 9 : 강제 종료

 15 : 프로세스와 관련된 파일을 정리하고 종료. 종료되지 않는 프로세스가 있을 수 있음.

 

 pkill [옵션] [패턴] : PID가 아닌 프로세스의 명령 이름 (CMD)로 종료

 

 killall [명령 이름] : 해당 이름의 프로세스를 모두 종료

 

 - 프로세스 관리 도구

 top : 현재 실행 중인 프로세스의 정보를 주기적으로 출력

 시스템 정보에서도 프로세스 확인 가능!

■ 포그라운드·백그라운드 프로세스와 작업 제어

 - 포그라운드 작업과 백그라운드 작업

 포그라운드 작업 : 일반적으로 사용자가 명령을 실행하는 방식 (인터프리터형)

 백그라운드 작업 : 명령을 처리하는 동안에도 프롬프트 사용이 가능한 방식. & 기호로 사용

   작업 결과가 뒤섞일 수 있어 출력과 오류를 리다이렉션 해서 쓴다

 

 - 작업 제어

 제어는 작업 전환, 작업 일시 중지, 작업 종료를 말하고,

 이 중에 작업 전환은 '포그라운드 ↔ 백그라운드'의 전환을 의미한다.

 

 jobs [%작업 번호] : 백그라운드 작업을 모두 보인다. (특정 작업 번호 지정 가능)

 출력 시 작업 순서가 나오는데 '+', '-', ' ' 순서로 최근 작업이다.

 

 ctrl+z / stop [$작업 번호] : 포그라운 작업 중지

 bg [$작업 번호] : 해당 작업을 백그라운드로 전환

 fg [$작업 번호] : 해당 작업을 포그라운드로 전환

 

 nohup [명령]& : 로그아웃 이후에도 백그라운드 작업 계속 실행

■ 작업 예약

 - 정해진 시간에 한 번 실행

 at [옵션] [시간] : 예약한 명령을 정해진 시간에 실행 (프롬프트가 at> 으로 바뀐다)

 -l : 현재 실행 대기 중인 명령의 전체 목록 출력 (= atq 명령)

 -r [작업 번호] : 대기 중인 명령 중 해당 작업 번호를 삭제 (= atrm 명령)

 -m : 출력이 없어도 작업 완료 시 사용자에게 매일로 알려준다.

 -f [파일] : 표준 입력 대신 실행할 명령을 파일로 지정

 

 atq : 사용자의 등록된 작업 목록 출력

 atrm [작업 번호] : 지정된 작업 삭제 

 

 관리자들은 at 명령 사용을 컨트롤할 수 있는데, /etc/at.deny, /etc/at.allow 파일로 관리

 at.deny는 최초에는 빈 파일로, 사용 제한된 유저 목록을 저장하고,

 at.allow는 만들어야 하며 사용 가능한 유저 목록을 저장한다. 

 allow 파일에 이름이 있다면 deny 파일에 이름이 있어도 사용 가능하다.

 두 파일 모두 없다면 root만 명령 사용 가능.

 

 - 정해진 시간에 반복 실행

 crontab [-u 사용자ID] [옵션] [파일명] : 사용자의 crontab 파일을 관리

 -e : 사용자의 crontab 파일을 편집

 -l : crontab 파일 목록 출력

 -r : crontab 파일 삭제

 

 작업 명령 형식 - 분(0~59) 시(0~23) 일(1~31) 월(1~12) 요일(0~6) 작업내용

 ex. 30 23 1 * * /usr/bin/ls -l ~hejow > ~hejow/cron.out

 

 at 명령과 마찬가지로 /etc/cron.allow, /etc/cron.deny 파일로 관리하고, 이하 모두 동일하다.

댓글