728x90

프로세스의 개념

 

프로그램

소스 코드가 빌드되어 실행 가능한 실행 바이너리 파일(보조 기억 장치에 저장된 파일 자체)

 

프로세스

- 현재 시스템에서 실행 중인 프로그램

 

쓰레드

- 프로세스 내에서 실행되는 작업의 단위

 

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

- 프로세스는 부모-자식 관계를 가짐

 

프로세스의 번호(PID)

- 각 프로세스는 고유한 번호를 가지고 있음

 

프로세스의 종류

- 데몬 프로세스: 백그라운드에서 독립적으로 실행되는 것

- 고아 프로세스: 부모 프로세스가 먼저 종료된 자식 프로세스

- *좀비 프로세스: 프로세스를 종료했음에도 불구하고 프로세스 테이블 목록에 남아있음

   * 버그나 개발의 완성도가 떨어지는 경우 등 좀비 프로세스의 발생 원인은 다양함

 

 

프로세스 관리 명령

 

프로세스 목록 보기: ps

- 현재 실행 중인 프로세스의 목록 출력

- 옵션 없이 사용하는 ps 명령은 현재 쉘이나 터미널에서 실행한 사용자 프로세스에 대한 정보를 출력함

* pts: 가상 터미널, 과거에는 터미널이라는 하드웨어 장비를 연결하여 명령어를 입력하였지만 요즘에는 가상 터미널을 사용함

 

프로세스의 상세 정보 출력: -f 옵션

- 프로세스의 상세한 정보 출력: PPID, 터미널 번호, 시작 시간 등

 

터미널에서 실행한 프로세스 정보 출력: a 옵션

 

터미널에서 실행한 프로세스의 상세 정보 출력: au 옵션

- a 옵션과 u 옵션을 함께 사용하면 터미널에서 실행한 프로세스의 상세 정보를 출력함: 사용자 계정 이름, CPU, 메모리 사용량 등

 

전체 프로세스 목록 출력: -e 옵션

- 시스템에서 실행 중인 모든 프로세스를 출력함

- TTY 값이 ? 인 것은 대부분 데몬으로 시스템이 실행한 프로세스

 

전체 프로세스의 더 자세한 정보 출력: -ef 옵션

 

특정 프로세스의 정보 출력: ps -ef | grep [프로세스 이름]

 

전체 프로세스 목록 출력(BSD 옵션): ax 옵션

- 시스템에서 실행 중인 모든 프로세스 출력

 

시그널 목록 출력: kill -l

- 시그널: 프로세스에 무언가 발생했음을 알리는 메시지

 

프로세스 종료: kill [-시그널] PID

시그널

2 인터럽트 시그널을 보냄
9 프로세스 강제 종료(윈도우에서 작업끝내기와 같은 기능)
15 프로세스와 관련된 파일을 정리한 후 종료함

 

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

- 프로세스 관리 도구

 

PID 프로세스 ID USER 사용자 계정
PR 우선 순위 NI Nice 값
VIRT 프로세스가 사용하는 가상 메모리의  크기 RES 프로세스가 사용하는 메모리의 크기
SHR 프로세스가 사용하는 공유 메모리의 크기 %CPU 퍼센트로 표시한 CPU 사용량
%MEM 퍼센트로 표시한 메모리 사용량 TIME+ CPU 누적 이용 시간
COMMAND 명령 이름    

 

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

 

포그라운드 작업

- 포그라운드 프로세스: 사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 기다려야함

 

sleep 명령이 끝날 때까지 기다려야 함

백그라운드 작업

- 백그라운드 프로세스: 명령을 실행하면 명령의 처리가 끝나는 것과 관계없이 곧바로 프롬프트가 출력되어 사용자가 다른 작업을 계속 할 수 있음

 

프롬프트가 바로 나와 다른 명령을 실행할 수 있음

작업 제어

- 작업 제어는 작업 전환과 작업 일시 중지, 작업 종료를 의미함

작업 전환 포그라운드(백그라운드) 작업에서 백그라운드(포그라운드) 작업으로 전환
작업 일시 중지 작업을 잠시 중단
작업 종료 프로세스를 종료하는 것처럼 작업 종료

 

작업 목록 보기: jobs

 

 

작업 전환하기: bg %[작업 번호]

 

백그라운드에서 포그라운드로 전환
포그라운드에서 백그라운드로 전환

작업 종료하기: ctrl + c

 

로그아웃 후에도 백그라운드 작업 계속 실행하기: nohup

 

작업 예약

단일성 작업 예약 등록: at

 

정해진 시간에 반복 실행: crontab

 

 

* crontab 삭제: crontab -e

 

/var/spool/cron 디렉토리로 가면 사용자별 crontab 설정 파일이 존재함

- 이 파일을 편집해도 crontab 설정 가능

- 그러나 crontab -e 사용을 권장함

 

crontab 명령어를 사용하여 작성하는 cron은 개별 사용자용 크론

 

시스템 차원에서 cron 작업 예약 가능

- /etc/crontab 파일에서 작업 등록- /etc/cron.d/ 디렉토리에 복사 후 파일명 변경

 

crontab 심화학습: crontab -e 사용

1. 매년 1월 첫 번째 일요일에 재부팅이 되도록 설정

0 0 1-7 1 0 systemctl reboot

 

2. 매월 매일 오후 1시부터 5시까지 10분마다 date 명령어를 실행해서 datefile01에 이어쓰기로 저장하도록 설정

*/10 13-17 * * * date >> datefile01

 

> : 덮어쓰기(기존 파일 삭제 후 새 파일 생성)

>> : 이어쓰기(기존 파일에 이어쓰기)

3. 매년 3월, 6월, 9월 두 번째 화요일 14시 20분에 /etc/passwd 파일의 내용을 userfile에 갱신하도록 설정

20 14 8-14 3,6,9 2 cat/etc/passwd > /root/userfile

 

연습문제

1. 매월 1일 새벽 12시 30분에 datefile1에 date 명령어 결과가 이어쓰기로 써지도록 하라

30 0 1 * * date >> datefile1

 

2. 1분마다 date 명령어를 실행해서 datefile2에 이어쓰기로 써지도록 하라

* * * * * date >> datefile2

 

3. 매년 1월 1일 오후 12시에 date 명령어가 datefile3으로 덮어쓰기로 실행되도록 하라

0 12 1 1 * date > datefile3

 

4. 3번 작업만 삭제하려면?

crontab -e

* crontab -r은 권장하지 않음

 

5. 사용자 계정 user가 예약 작업을 하도록 설정

crontab -e -u user

 

엑세스 제어 설정 파일

at

/etc/at.deny

/etc/at.allow

 

crontab

/etc/cron.deny

/etc/cron.allow

 

1. *.allow 파일은 존재하지 않고 *.deny 파일만 존재하면, *.deny 파일에 등록된 사용자는 스케줄링 명령 사용 불가

 

2. *.allow 파일과 *.deny 파일이 둘 다 존재하면 *.allow에 등록된 사용자만 스케줄링 명령 사용 가능

 

3. 둘 다 존재하지 않으면 root만 스케줄링 명령 사용 가능

728x90

+ Recent posts