실행 중인 프로그램
Linux에서 모든 프로세스에는 프로세스 식별 번호( PID, Process ID )를 통해 관리 한다.
PID는 프로세스 자신 식별 번호
Kernel의 작업 관리자가 PID를 이용하여 프로세스 관리
PID는 양의 정수로 부여하고 1번부터 차례대로 부여
PID 관리는 Kernel의 작업 관리자가 관리하므로 사용자가 임의로 부여할 수 없다.
각 프로세스마다 기본적인 메모리 할당 - 가상 메모리로 할당, 32bit CPU 기준으로 4 GB 할당
Linux 메모리 운영은 기본적으로 가상 메모리 운영을 의미
Linux에서 프로세스 관리는 계층적으로 관리
Linux에서 프로세스가 생성된다는 의미는 부모( parent ) 프로세스가 자식( child ) 프로세스 생성을 의미
예로 shell에서 ls 명령을 입력한다는 것은 shell 프로세스가 ls 프로세스를 생성해서 실행 한다는 의미
shell 프로세스 부모 프로세스가 되고, ls 프로세스가 자식 프로세스가 된다.
부모 프로세스 식별 번호인 부모 프로세스 식별 번호( PPID, Parent PID )가 모든 프로세스는 가지고 있다.
Linux 프로세스중 가장 상위 프로세스 ID는 1번 프로세스 - Linux booting시에 생성
Linux shell을 운영할 때 shell 프로세스가 부모 프로세스가 되고 입력하는 명령에 의해 생성된 프로세스는 자식 프로세스가 된다.
부모 프로세스 역할
자식 프로세스 역할
정상 프로세스
일반적인 프로세스
고아 프로세스
부모 프로세스가 먼저 종료된 상태의 프로세스
언젠가는 좀비 프로세스가 될 수 있다.
따라서 통산 1번 프로세스가 부모 프로세스로 설정된다.
좀비 프로세스
자식 프로세스가 종료 되었으나 부모 프로세스에 의해 Kernel에 보고 되지 않아 현재 동작중인 프로세스로 인식
프로세스는 종료 되었으나 Kernel의 프로세스 관리 목록에는 존재하는 프로세스
좀비 프로세스가 많이 존재한다는것은 Kernel의 프로세스 운영 효율이 떨어진다.
프로세스 관리 시점에 상태값으로 확인 가능
foreground 프로세스
사용자와 상호 작용이 가능한 프로세스
하나의 프로세스만 foreground 프로세스가 된다.
background 프로세스 : 사용자와 상호 작용을 수행하지 않는 프로세스
daemon 프로세스
무조건 background로 프로세스 생성
사용자와 상호 작용을 절대 하지 않는다.
다른 프로세스 요청에 대한 응답을 목적으로 하는 프로세스
Linux에서 daemon 프로세스는 프로세스 이름이 d 로 끝난다.
ps [ 옵션 ] : 현재 동작중인 프로세스 확인 명령
유닉스 유형 - 여러 옵션을 묶어서 사용 가능, -( 하이픈 )을 붙여서 사용
BSD 유형 - 여러 옵션을 묶어서 사용, -( 하이픈 )을 사용하지 않고 옵션 사용
GNU 옵션 - -( 하이픈 두 개 ) 사용하고 옵션면은 full name을 사용, 여러 옵션 사용은 불가능
ps - 현재 shell 상에서 실행되고 있는 프로세스 목록 출력
ps -f - 현재 shell 상에서 실행되고 있는 프로세스 목록을 상세 정보 출력
ps a - 현재 shell에서 실행시킨 프로세스 정보 출력( BSD 유형 옵션)
process 내에서 동작하는 실행 흐름
스레드는 프로세스에 비해 자원 소모량이 적다.
스레드는 프로세스에 비해 데이터 공유가 쉽다.
프로세스간에 데이터 공유를 위해서는 별도의 외부 도구를 사용해야 한다.
멀티 프로세스보다 멀티 스레드가 적은 리소스를 이용하여 동시 처리가 가능한 장점
멀티 스레드 단점은 프로그래밍이 어렵다.
ps au - 현재 shell에서 실행시킨 프로세스 상세 정보 출력( BSD 유형 옵션
grep 명령 - 파일 내용 또는 결과 내용에 대하여 검색 패턴에 대한 검색
grep [ 옵션 ] <검색 패턴> <파일>
<검색 패턴> - 검색어( 문자열 ), 정규 표현식 사용 가능
-n 옵션 - 행 번호 표시
-i 옵션 - 대소문자 구별없이 모두 검색
-l 옵션 - 검색 패턴이 포함된 모든 파일명 출력
파이프 기능과 연계해서 많이 사용
전체 프로세스 정보 확인
ps -e - 전체 프로세스 목록 출력( 유닉스 유형 )
ps -ef - 전체 프로세스 상세 목록 출력( 유닉스 유형 )
ps ax - 전체 프로세스 목록 출력( BSD 유형 )
ps aux - 전체 프로세스 상세 목록 출력( BSD 유형 )
ps 명령 기타 옵션
ps -u <사용자 이름> - 특정 사용자에 대한 프로세스 정보 출력( 유닉스 유형 )
ps -fu <사용자 이름> - 특정 사용자에 대한 프로세스 상세 정보 출력( 유닉스 유형 )
ps -p - 특정 프로세스 상세 정보 출력
프로세스 계층 형식으로 출력
pstree [ 옵션 ]
-a 옵션 - 프로세스 생성 명령에 대한 모드 옵션 출력
-h 옵션 - 현재 shell과 연관된 프로세스에 대하여 하이라이트로 출력
인터럽트( Interrupt )
불가항력 상황에서 발생하는 일, 즉 정상적인 처리가 아니고 특수 상황에 발생하는 일
하드웨어 인터럽트( HWI ) - 하드웨어 이상에 의해 더이상 컴퓨터 시스템 운영이 어려울 때 발생
소프트웨어 인터럽트( SWI ) - 소프트웨어 적으로 발생하는 인터럽트
시그널( Signal )
Linux Kernel에서 의해서 프로세스에게 전달되는 소프트웨어 인터럽트
시그널에 따라 해당 프로세스 동작에 영향을 미친다.
시그널 발생시 처리 유형
미리 정해진 시그널 동작을 무조건 수행
ctrl + c키 입력시 동작이 미리 정의된 시그널에 대한 처리
무시 - 해당 프로세스에서 설정
사용자 프로세스에서 시그널 처리에 대하여 별도 정의해서 처리
kill 명령 - 시그널 발생 명령
kill [ 옵션, 시그널 번호 ] <프로세스 ID >
-l 옵션 - 현재 사용 가능한 전체 시그널 목록 출력
2번 SIGINT
ctrl + c 키 입력시 발생하는 시그널
기본 동작은 프로세스 종료
프로세스에서 무시하거나 다른 처리 가능
9번 SIGKILL
무조건 프로세스 종료
프로세스에서 무시할 수 없음
kill -9 <프로세스 ID> - 프로세스 ID에 해당하는 프로세스 종료
전체 프로세스 실시간 실행 상태 모니터링
top
top 내부 명령
foreground 프로세스 생성
shell에서 명령 실행
background 프로세스 생성
shell에서 명령 실행시 명령 마지막에 & 추가
bg 명령을 이용한 background 프로세스로 전환
ctrl + z 키 입력을 통한 background 전환
jobs 명령
fore/background 전환
fg <%작업번호>
background 작업을 foreground로 전환
bg <%작업번호>
background 로 전환
정해진 시간에 반복적으로 명령 실행
crond( daemon process )에 의해 crontab 파일 내용을 참조하여 자동으로 정해진 작업 수행
crontab 파일 내용
30 * * * * /usr/bin/ls -FR / > ~worker/cron.out
crontab -e 명령으로 crontab 파일에 정해진 시간에 작업할 내용을 등록