프로세스의 개념
프로그램
소스 코드가 빌드되어 실행 가능한 실행 바이너리 파일(보조 기억 장치에 저장된 파일 자체)
프로세스
- 현재 시스템에서 실행 중인 프로그램
쓰레드
- 프로세스 내에서 실행되는 작업의 단위
프로세스의 부모-자식 관계
- 프로세스는 부모-자식 관계를 가짐
프로세스의 번호(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 |
명령 이름 |
|
|
포그라운드, 백그라운드 프로세스와 작업 제어
포그라운드 작업
- 포그라운드 프로세스: 사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 기다려야함
백그라운드 작업
- 백그라운드 프로세스: 명령을 실행하면 명령의 처리가 끝나는 것과 관계없이 곧바로 프롬프트가 출력되어 사용자가 다른 작업을 계속 할 수 있음
작업 제어
- 작업 제어는 작업 전환과 작업 일시 중지, 작업 종료를 의미함
작업 전환 |
포그라운드(백그라운드) 작업에서 백그라운드(포그라운드) 작업으로 전환 |
작업 일시 중지 |
작업을 잠시 중단 |
작업 종료 |
프로세스를 종료하는 것처럼 작업 종료 |
작업 목록 보기: 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만 스케줄링 명령 사용 가능