프로세스
-시스템 초기화 프로세스
init-부팅 시 가장 먼저 실행되는 시스템 / 초기화 프로세스
프로세스
- 커널의 관리하에 현재 시스템에서 동작중인 프로그램
- init을 제외한 모든 프로세스는 부모-자식 관계를 가지고 있다.
프로세스 종류
- 데몬 프로세스
커널에 의해서 실행되고, 특정 서비스를 제공하기 위해 동작하고 있는 프로세스
-부모 프로세스
-자식 프로세스
부모 프로세스에 의해 만들어지는 프로세스
자식 프로세스는 종료시 부모 프로세스 에게 결과를 전달하고 종료한다.
-고아(orphan) 프로세스
자식 프로세스 보다 먼저 부모 프로세스가 종료 되었을때 해당 자식 프로세스는 고아 프로세스가
되어 init프로세스가 관리를 한다
-좀비(zombie,defunct) 프로세스
자식 프로세스의 종료신호를 부모 프로세스가 처리하지 못할 경우, 자식 프로세스는 좀비 프로세스가 된다.
ps (process status)- 시스템에 동작중인 프로세스 확인
-e 모든 프로세스에 대한 리스트 출력
-f full format 으로 출력
-a 다른 사용자들의 프로세스도 출력
-u 사용자 이름, 시간 등 상세한 정보를 출력
-x 현재 사용하고 있는 모든 프로세스를 출력
ex) #ps #ps -ef #ps aux
#ps -ef
UID - 프로세스를 실행 시키는 프로세스의 소유자를 의미
PID - 실행된 프로세스에 부여된 숫자를 의미
PPID - parents process id , 프로세스를 생성한 부모 프로세스의 PID
STIME-프로세스의 시작날짜나 시간 TTY-프로세스가 실행된 터미널의 종류 와 번호
CMD- 실행되고 있는 프로그램 이름
USER- 프로세스 소유자 이름
PPID- 부모프로세스 id
%CPU- 사용된 cpu 측정량
%MEM- 사용된 메모리 측정량
VSZ- 가상 메모리 크기
RSS- 사용된 실제 메모리
TTY- 프로세스와 관련된 가상 터미널
STAT- 프로세스의 상태
R: 실행중 (running)
S: 대기상태(sleep)
T: 작업 제어 정지된 상태(stop)
Z: 좀비 프로세스(defunct)
X: 완전히 죽어 있는 프로세스
D: 중지(interrupt) 시킬수 없는 잠자고 있는 (휴지) 프로세스 상태
<: 프로세스의 우선 순위가 높은 상태
N: 프로세스의 우선 순위가 낮은 상태
STIME - 프로세스 시작 시간
TIME - 총 CPU 사용 시간
COMMAND - 실행된 프로세스 명, 실행된 명령어
kill - 프로세스에게 신호를 전달하여 상태를 변화시키는 명령어
- 지정한 시그널을 프로세스에 전달
#kill - [시그널] [PID]
시그널 종류 확인
#kill -l
자주 사용하는 시그널
2) SIGINT - 프로세스 종료
9) SIGKILL - 프로세스 강제 종료
15) SIGTERM - 프로세스 종료
18) SIGCONT - 프로세스 재시작
19) SIGSTOP - 프로세스 정지
프로세스 동작 형태
1. 포어 그라운드 (Foreground Process)
- 프롬프트에서 입력하는 대부분의 명령어는 포어 그라운드로 동작
- 명령어의 실행 과정이나 결과를 화면에 출력
- 포어 그라운드로 실행되는 프로세스가 종료되길 기다렸다가 종료되면 다시
프롬프트(bash)를 보여주어 명령 대기 상태로 반환
#kill -19 1471 //sleep 프로세스 정지
#ps -ef //stop 확인
#kill -18 1471 //sleep프로세스 재시작
#jobs //running확인
#ps -ef 실행
Ctrl+Z //SIGSTOP신호 보내기 (프로세스 정지)
Ctrl+C //SIGINT 신호 보내기 (프로세스 종료)
--------------------------------------------------------------------------------------
실습
Xshell 세션 추가하여 2개의 창에서 프로세스 확인 하며 실습 진행
1. sleep 99999 & 명령어 2번 입력 후 kill을 이용하여 해당 프로세스 강제 종료
(1) 첫번째 sleep 프로세스 숫자 시그널로 종료
(2) 두번째 sleep 프로세스 문자 시그널로 종료
시그널 잘못 입력후 그런 프로세스가 없음.
2. sleep 99999 & 명령어 5번 입력 후 pkill sleep 명령어 입력
결과 확인 및 명령어의 용도 생각해보기
[6]-의 의미는 [7]보다 먼저 작업한것이고
[7]+의 의미는 가장 최근에 작업한 것 확인.
3. 초기 bash shell 상태에서 아래 명령어 순서대로 실행
(1)/bin/bash (2)/bin/bash (3)/bin/bash (4)sleep 99999 & (5)cat/etc/services | more
5개의 명령어 입력후 다른 세션에서 pstree 명령어 실행, 명령어의 용도 생각해보기
pstree 부모자식 트리구조 확인
4. 초기 bash shell 상태에서 아래 명령어 순서대로 실행
(1)/bin/bash (2)vi /etc/services 다른세선->#kill -9 [bin/bash의 pid] ps 명령어 옵션으로
vi /etc/services 프로세스의 pid와 ppid를 확인하고
(2)vi /etc/services 프로세스의 상태 및 결과에 대해 생각해보기
/bin/bash의 pid를 kill -9 SIGKILL 강제종료 했더니 /services 죽었음이 떴다.
5. sleep 99999 & 명령어 실행 후 ps 명령어와 옵션으로 현재 상태(STAT)을 출력하여 상태 값을
나타내는 문자 확인 후, kill 명령어나 fg 명령으로 잠시 중지(STOP)시킨 후 다시 ps명령어로
현재 상태를 나타내는 문자 확인
----------------------------------------------------------------------------------------
#pkill sleep??
#pkill [signal] [option] [패턴]
-kill 명령어는 특정 프로세스에 signal을 보내는 명령어이지만, 특정 프로세스를 찾기 위해서는 먼저
grep 명령어와 ps 명령어를 이용하여 특정 프로세스를 찾은 후 다시 kill signal을 보내야 하는 불편함
이 있다. 이러한 점을 개선 하기 위해서 pgrep 명령어와 pkill 명령어를 이용하여 특정 프로세스에
signal을 보낼수 있다.
-프로세스의 이름을 지정하여 프로세스를 죽인다.
$pgrep sleep
$pkill sleep
#kill,#pkill 차이 공부(http://blog.naver.com/jsky10503/220728907425)
#pgrep [option] [패턴]
-l : PID와 함께 일치하는 프로세스의 이름을 출력
-f : -l 옵션과 함께 사용하면 명령어의 경로도 출력
-n : 패턴과 일치하는 프로세스의 가장 최근 PID 출력
-x : 패턴과 정확하게 일치 되는 프로세스만 출력
-특정 프로세스를 탐색하여 사용자에게 보여주는 명령어로, 시스템에서 사용되고 있는 여러 프로세스 중
특정 프로세스의 정보를 보고자 할때 ps 명령어로 grep pattern으로 찾는 방법(ps -ef | grep ps_name)
같은 효과를 갖는다.
#pstree??
-프로세스의 상관관계(부모-자식 관계)를 트리 형태로 출력해주는 명령어로써, 관계를 트리 형태로
출력해주므로 계층 관계를 한 눈에 파악할 수 있다
작업 예약 at & cron
- 주기적으로 반복해야 하는 작업에 사용
실습 환경)
#rpm -qa | grep at // at 패키지 설치 유무 확인
#rpm -qa | grep mail // mail 패키지 설치 유무 확인
#yum -y install at // at 패키지 설치
#yum -y install mail // mail 패키지 설치
#rpm -qa | grep at // at 패키지 설치 유무 확인
#rpm -qa | grep mail // mail 패키지 설치 유무 확인
#service atd start // at 데몬 실행
#yum -y install cron*
at - 정해진 시간에 한번 실행
형식 #at [옵션] [시간]
옵션 -l 현재 실행 대기 중인 목록을 출력 (#atq)
-r 현재 실행 대기 중인 작업을 삭제 (#atrm)
시간 형태
yyyy-mm-dd, HH:MM, today, tomorrow, hours, days, weeks, now,.,.
ex) #at 6pm + 4 days //지금부터 4일 후 오후 6시에 작업을 수행
#at 10am jul 18 //7월 18일 오전 10시에 작업 수행
#at 4am tomorrow // 내일 오전3시에 작업을 수행
#at 10:00am today // 오늘 오전 10시에 작업을 수행
ex)
#at today + 1min //at 실행
ctrl+D //저장
E0T - End 0f Transmission //전송 끝
#at - l
[작업번호][날짜][시간][큐이름][사용자]
at 예약 작업은 /var/spool/at 디렉토리에 큐 파일이 임시 저장된 후, 저장이 완료 되면 자동으로 삭제가 되며
/var/spool/mail 디렉토리에 사용자명으로 결과가 저장된다.
디렉토리 및 파일 생성 확인
cron - 정해진 시간에 반복 실행
ex) 매일 오전 8시에 특정 파일 압축하여 전송
매달 1일에 /var 디렉토리를 삭제
#crontab //crontab 파일을 관리
옵션 -l crontab 파일을 출력
-r crontab 파일을 삭제
-e crontab 수정
-u [사용자명] 해당 사용자의 crontab 설정
분 시 일 월 요일 작업내용
0~59 0~23 1~31 1~12 0~6 반복할 명령어/스크립트
- 일요일(0), 월요일(1), 토요일(6)
- 사용자 별로 각각 crontab 생성이 되며, 해당 파일에 반복할 작업의 내용을 작성
- 여러개의 작업도 저장할 수 있으며, 한 행에 하나의 작업을 설정
- 항목에 '*'(asterisk)이면 해당 항목의 모든 값을 의미
- '-' (hypen) 두 숫자 사이에 포함된 범위 (ex 1-5 == 1,2,3,4,5)
- ',' (comma)로 구분하여 나열된 숫자 중 일치하는 경우 (ex 1,3,5)
- '/' (slash)로 시간 간격을 지정 할 수 있다.
#cat /etc/crontab //기본 양식
#crontab -e
ex) 30 22 1 * * cp -R /home/test /backup/home
매요일 매월 1월 22시 30분에 /home/test를 /backup/home으로 복사하라
ex) */2 10 * * * [명령어]
매요일 매월 매일 10시 2분마다 [명령어] 실행
ex) 1-10 12 * * * [명령어]
매요일 매월 매일 12시 1분부터 10분까지 [명령어] 실행
ex) 1,10 12 * * * [명령어]
매요일 매월 매일 12시 1분, 10분 [명령어] 실행
#crontab -e
문제 1) 매요일 매월 매일 매시 1,2,3분에 /practice 디렉토리에 test1 파일 생성
확인 - #crontab -l
#date -s 20170413
date 20170413으로 설정후 1분뒤 test1파일 생성 확인
다른 계정에 있을시 crontab -u root -e 접속 수정
현재계정 -r crontab삭제
삭제 확인
#mkdir -p /home/cron_test
#crontab -e
1,2,3 * * * * touch /home/cron_test/cron1_&(date +\%H-\%M)
1-3 * * * * touch /home/cron_test/cron2_&(date +\%H-\%M)
#date -s "2017-04-13"
1분 2분 3분 파일 생성 확인
crontab 명령 사용 제한하기
/etc/cron.allow, /etc/cron.deny 파일로 사용자의 접근을 허용/차단 할 수 있다.
한줄의 사용자 계정명 하나씩만 작성하며, /etc/cron.deny 파일은 기본적으로 있지만
/etc/cron.allow 파일은 관리자 직접 만들어야 한다.
- /etc/cron.allow 파일이 있을 경우
-> 해당 파일에 명시된 사용자만 사용 가능
- /etc/cron.allow 파일은 없고, cron.deny 파일이 있을 경우
-> cron.deny 파일에 명시 되지 않은 사용자만 사용 가능
- /etc/cron.allow, cron.deny 파일이 둘 다 없을 경우
-> root 만 사용이 가능
사용자 테스트
테스트 계정 스위칭 후 crontab -e 명령어 실행가능 확인
vi로 cron.deny들어가 cron_user1 입력 저장
다시 계정 스위칭후 crontab 명령어 실행 불가능 확인
deny 파일 이름 변경
allow 파일도 없고, deny 파일도 없는 경우 테스트
crontab명령어 불가능
vi를 이용하여 /etc/cron.allow 파일을 생성 한 후,
내용에 S-USER1 ,cron_user1 추가 계정 각각 crontab 명령어 사용 가능 여부 확인
crontab명령어 사용가능
'Server > Linux' 카테고리의 다른 글
xshell/ 파일시스템 RAID (0) | 2017.04.16 |
---|---|
xshell/ 파일시스템 데몬 파티션 (0) | 2017.04.15 |
xshell/ 사용자계정 명령어3 (0) | 2017.04.10 |
xshell/ 허가권,소유권 명령어 (0) | 2017.04.08 |
xshell/ 사용자계정 명령어2 (0) | 2017.04.07 |