반응형
(본 강의 노트는 한빛 아카데미의 <유닉스 시스템 프로그래밍> 책을 기반으로 하고 있습니다)
Ch05. 프로세스 정보
학습목표
- 유닉스 시스템에서 프로세스가 무엇인지 이해한다.
- 함수를 사용해 프로세스의 속성을 검색할 수 있다.
- 프로세스의 실행시간을 측정할 수 있다.
- 환경변수를 설정하고 사용할 수 있다.
목차
- 프로세스의 정의
- 프로세스의 구조와 상태변화
- 프로세스 목록 보기
- 프로세스 식별 함수
- 프로세스 그룹 및 세션
- 프로세스 실행시간 측정
- 환경변수의 이해
- 환경변수의 사용
01. 프로세스의 정의
프로세스
: 실행중인 프로그램을 의미
- 프로세서 : 중앙처리장치
- 프로그램 : 사용자가 컴퓨터에 작업을 시키기 위한 명령어의 집합
- 고급언어로 작성한 프로그램을 기계어 프로그램으로 변환해야 실행 가능
02. 프로세스의 구조와 상태 변화
프로세스의 구조
: 메모리에 적재된 프로세스의 구조
- text : 실행 코드 저장
- data : 전역 변수 저장
- heap : 동적 메모리 할당을 위한 영역
- stack : 지역변수를 저장하는 영역
프로세스 상태 변화
- 프로세스의 상태는 규칙에 따라 여러 상태로 변함
: 커널의 프로세스 관리 기능이 프로세스의 스케줄링 담당
- 프로세스는 먼저 사용자 모드에서 실행
- 사용자 모드에서 시스템 호출을 하면 커널 모드로 전환
- 수면 중이던 프로세스가 깨어나 실행 대기 상태로 전환되면 실행 준비
- 커널 모드에서 실행 중 입출력을 기다릴 때처럼 실행을 계속할 수 없으면 수면 상태로 전환
03. 프로세스 목록 보기
프로세스 목록 보기
- 현재 실행중인 프로세스 목록을 보려면 PS 명령 사용
: 전체 프로세스를 보려면 -ef 옵션 사용
- 현재 실행 중인 프로세스를 주기적으로 확인
: 공개소프트웨어 : top
04. 프로세스 식별 함수
프로세스 식별
PID 검색 : getpid( )
: 이 함수를 호출한 프로셋의 PID를 리턴PPID 검색 : getppid( )
: 부모 프로세스의 PID를 리턴
05. 프로세스 그룹 및 세션
프로세스 그룹
- 프로세스 그룹
- 관련 있는 프로세스를 묶은 것으로 프로세스 그룹ID가 부여됨
- 작업 제어 기능을 제공하는 쉘은 명령을 파이프로 연결하여 프로세스 그룹 생성 가능
- 프로세스 그룹 리더
- 프로세스 그룹을 구성하는 프로세스 중 하나가 그룹 리더가 됨
- 프로세스 그룹 리더의 PID 가 PGID
- 프로세스 그룹 리더는 변경 가능
- PGID : getpgrp(), getpgid()
- PGID 변경 : setpgid()
세션
- POSIX 표준에서 제안한 개념
- 사용자가 로그인해 작업하고 있는 터미널 단위로 프로세스 그룹을 묶은 것
- 세션 검색 : getsid( )
: 새로운 세션을 생성 시 해당 프로세스는 세션 리더가 되면 세션 리더의 PID가 세션ID - 세션 생성 : setsid( ))
06. 프로세스 실행 시간 측정
프로세스 실행 시간 측정
- 프로세스 실행 시간의 구성 : 시스템 실행 시간 + 사용자 실행 시간
- 시스템 실행 시간 : 커널 코드를 수행한 시간
- 사용자 실행 시간 : 사용자 모드에서 프로세스를 실행한 시간
- 프로세스 실행 시간 측정
- 사용자 실행 시간과 시스템 실행시간으로 나누어 tms 구조체에 저장
- 시간 단위는 클록틱
- tms 구조체
07. 환경변수의 이해
환경변수
- 프로세스가 실행되는 기본 환경을 설정하는 변수
- 로그인 명, 쉘, 터미널에서 설정된 언어, 경로명 등
- 현재 쉘의 환경 설정을 보려면 env 명령을 사용
08. 환경변수의 사용
환경변수의 사용
전역변수 environ
main 함수 인자 사용
환경 변수 검색 : getenv( )
환경변수 설정 : putenv( )
환경변수 설정 : setenv( )
- envname : 환경변수명 지정
- envval : 환경변수 값 지정
- overwrite : 덮어쓰기 여부 지정, 0이 아닐 경우 덮어쓰고, 0이면 덮어쓰지 않음
환경변수 설정 삭제 : unsetenv( )
반응형
'Computer Science > 유닉스프로그래밍' 카테고리의 다른 글
[유닉스 시스템 프로그래밍] Ch07. 시그널 (0) | 2020.11.04 |
---|---|
[유닉스 시스템 프로그래밍] Ch06. 프로세스 생성과 실행 (0) | 2020.10.19 |
[유닉스 시스템 프로그래밍] Ch04. 시스템 정보 (0) | 2020.10.19 |
[유닉스 이론과 실습] ch06. 파일 접근 권한 관리하기 (0) | 2020.10.19 |
[유닉스 이론과 실습] ch13. 배시쉘 프로그래밍 (0) | 2020.10.18 |