프로 세 스 의 개념 과 부분 함수

7711 단어
1. 기본 개념 1. 프로 세 스 와 프로그램: 디스크 에 저 장 된 파일 로 명령 과 데 이 터 를 실행 할 수 있 는 정적 실 체 를 포함 합 니 다.프로 세 스: 실행 중인 프로그램 (한 프로그램 은 여러 번 실행 할 수 있 고 여러 프로 세 스 를 불 러 올 수 있 습 니 다).진입 은 바로 활동 상태 에 있 는 컴퓨터 프로그램 이다.
2. 프로 세 스 의 분류: 상호작용 프로 세 스: 입력, 출력 이 있 고 사용 자 는 자신의 상황 에 따라 데 이 터 를 입력 하여 원 하 는 결 과 를 얻 을 수 있 습 니 다 (일반 프로 세 스).일괄 처리 프로 세 스: 스 크 립 트 로 실 행 된 프로그램 (Linux 의 셸, windows 의 bat) 을 불 러 옵 니 다.데 몬: 항상 활성 화 된 배경 에서 실 행 됩 니 다. 시스템 이 시 작 될 때 불 러 오 거나 루트 사용자 가 수 동 으로 불 러 옵 니 다.3. 프로 세 스 보기 간단 한 방식: ps. 현재 사용자 가 터미널 제어 권 을 가 진 프로 세 스 정 보 를 표시 합 니 다.목록 형식: ps aux, 목록 형식 으로 상세 한 정 보 를 표시 합 니 다 a 모든 사용자 의 터미널 제어 프로 세 스 x 모든 사용자 의 터미널 제어 없 는 프로 세 스 u 상세 한 방식 으로 4 를 표시 합 니 다.프로 세 스 의 자세 한 정보 목록 USER 프로 세 스 의 주 PID 프로 세 스 id% CPU 사용률% MEM 메모리 사용률 VSZ 가 가상 메모리 의 크기 를 차지 합 니 다. 물리 적 메모리 의 크기 를 차지 합 니 다. TTY 터미널 이 제어 하 는 디 스 플레이 터미널 의 차 장치 번호 가 있 습 니 다. 터미널 제어 트 리 가 없 으 면?STAT 프로 세 스 의 상태 O 가 준비 되 어 있 으 며 시스템 에 의 해 예약 되 기 를 기다 리 고 있 습 니 다.R 실행 상태, 리 눅 스 시스템 이 준비 되 지 않 았 고 준비 상태 도 R 로 표시 했다.S 휴면 상 태 는 시스템 중단 (신호) 에 의 해 작 동 상태 로 전 환 될 수 있다.T 일시 정지 상 태 는 SIGTOP 신호 에 의 해 일시 정 지 된 것 으로 SIGCONT 신 호 를 받 았 을 때 다시 운행 상태 로 전 환 될 수 있다.Z 좀 비 상태, 실행 중지 가 끝 났 지만, 부모 프로 세 스 가 회수 되 지 않 았 습 니 다. <높 은 우선 순위 프로 세 스 N 낮은 우선 순위 프로 세 스 l 다 중 스 레 드 프로 세 스 + 프론트 프로 세 스 그룹 에 있 는 프로 세 스 s 세 션 첫 프로 세 스 START TIME 프로 세 스 시작 시간 COMMAND 프로 세 스 의 실행 가능 한 파일 이름 5, 부모 프로 세 스 와 하위 프로 세 스, 고아 프로 세 스 와 좀 비 프로 세 스 A 는 다른 프로 세 스 B 를 만 들 수 있 습 니 다. 작성 자 는 부모 프로 세 스 라 고 합 니 다. 프로 세 스 를 하위 프로 세 스 국 이 라 고 합 니 다.부모 프로 세 스 가 하위 프로 세 스 를 시작 한 후 운영 체제 호출 에서 부모 프로 세 스 를 동시에 실행 합 니 다 (동기 화).하위 프로 세 스 가 부모 프로 세 스 보다 먼저 끝나 면 부모 프로 세 스에 SIGCHLD 신 호 를 보 냅 니 다. 부모 프로 세 스 가 신 호 를 받 으 면 하위 프로 세 스 의 관련 자원 을 회수 해 야 하지만 기본 적 인 상황 에서 부모 프로 세 스 는 이 신 호 를 무시 합 니 다.즉, 하위 프로 세 스 가 끝 난 후에 부모 프로 세 스 가 하위 프로 세 스 의 자원 을 회수 하지 않 으 면 하위 프로 세 스 는 좀 비 프로 세 스 가 된다.부모 프로 세 스 가 자식 프로 세 스 보다 먼저 끝나 면 자식 프로 세 스 는 고아 프로 세 스 가 되 고 고아원 에 입양 되 어 init 의 자식 프로 세 스 가 됩 니 다.
2. 프로 세 스 식별 자 운영 체 제 는 모든 프로 세 스에 유일한 식별 자 를 할당 하고 기호 가 없 는 정수 로 프로 세 스 ID 를 표시 합 니 다.프로 세 스 ID 는 언제든지 유일 하지만 다시 사용 할 수 있 습 니 다. 프로 세 스 가 끝나 야 새로 만 든 프로 세 스 ID 를 사용 할 수 있 습 니 다.pid_t getpid(void); 기능: 프로 세 스 ID pid 가 져 오기t getppid(void); 기능: 부모 프로 세 스 ID uid 가 져 오기t getuid(void); 기능: 현재 프로 세 스 의 사용자 ID 가 져 오기 gidt getgid(void); 기능: 현재 프로 세 스 의 그룹 ID 가 져 오기
3. fork pidt fork(void); 기능: 새 프로 세 스 를 만 듭 니 다.반환 값: 한 번 에 두 번 호출 하면 되 돌아 갑 니 다. - 1 (프로 세 스 수가 시스템 에서 벗 어 나 면 프로 세 스 생 성 이 실 패 됩 니 다)
1. 두 사람 이 돌아 오 는 것 은 각각 프로 세 스 ID 와 0 입 니 다. 부모 프로 세 스 는 하위 프로 세 스 의 ID 를 받 고 하위 프로 세 스 는 0 으로 돌아 갑 니 다. 이 를 통 해 부자 프로 세 스 를 나 누 어 서로 다른 처리 가 지 를 만 들 수 있 습 니 다.2. fork 를 통 해 만 든 하위 프로 세 스 는 부모 프로 세 스 의 복사 본 (복사) 입 니 다. 하위 프로 세 스 는 부모 프로 세 스 데이터 세그먼트, bss 세그먼트, 쌓 기, 스 택, IO 흐름 (공유 파일 포인터 와 파일 설명자), 버퍼 의 복사 본 을 가 져 와 부모 프로 세 스 와 코드 세그먼트 를 공유 합 니 다.3. 하위 프로 세 스 는 부모 프로 세 스 의 신호 처리 방식 을 계승 합 니 다.4. fork 함수 가 호출 된 후에 아버지 가 프로 세 스 를 각각 실 행 했 습 니 다. 누가 먼저 돌아 올 지 는 모 르 지만 몇 가지 기법 으로 누가 먼저 실 행 했 는 지 확인 할 수 있 습 니 다.연습 1: 하위 프로 세 스 는 부모 프로 세 스 데이터 세그먼트, bss 세그먼트, 더미, 스 택, IO 흐름 (공유 파일 포인터 와 파일 설명자) 을 가 져 옵 니 다.연습 2: 부모 프로 세 스 를 위 한 5 개의 키 프로 세 스 를 만 듭 니 다. 모두 6 개의 프로 세 스 입 니 다.5. 좀 비 프로 세 스 와 고아 프로 세 스 의 실현.
4. 프로 세 스 의 정상 적 인 종료 1. main 함수 에서 return.2. 표준 라 이브 러 리 의 exit 함 수 를 호출 합 니 다.void exit(int status); 기능: 호출 자 는 이 프로 세 스 status 를 즉시 끝 냅 니 다. 상태 코드 를 종료 하면 부모 프로 세 스에 서 하위 프로 세 스 가 부모 프로 세 스에 남 긴 유언 을 가 져 올 수 있 습 니 다.종료 하기 전에 하 는 일: 1) 미리 등 록 된 함수 (atexit/on exit 를 통 해) 를 호출 합 니 다.int on_exit(void (*function)(int , void *), void *arg); 기능: 하나의 함 수 를 등록 합 니 다. 프로 세 스 가 exit 함 수 를 통 해 끝 날 때 function: 함수 포인터, 반환 값 이 없습니다. 매개 변수 1 은 exit 함수 의 매개 변수 이 고 매개 변수 2 는 on 입 니 다.exit 함수 의 두 번 째 인자.arg: function 함수 가 호출 되면 두 번 째 매개 변수 로 전 달 됩 니 다.
int atexit(void (*function)(void)); 기능: 프로 세 스 가 exit 함 수 를 통 해 끝 날 때 함 수 를 등록 합 니 다.function: 함수 포인터, 반환 값 이 없고 인자 가 없습니다.2) 마지막 닫 힌 상태 에 있 는 모든 표준 IO 흐름 을 씻 어 낸다.3) 운영 체제 4 에 정수 (EXIT SUCCESS/EXIT FAILURE) 를 되 돌려 주지 않 습 니 다. 이 함 수 는 되 돌아 오지 않 습 니 다. 그 기능 은 의 도움 을 받 았 습 니 다.exit/_Exit 3 、 호출exit/_Exit 함수 종료 주의: 이 두 함수 의 기능 은 같 습 니 다\# include voidexit(int status); #include void _Exit(int status);//호출 시스템 의exit 기능: 호출 된 프로 세 스 가 끝 날 것 입 니 다. 반환 값 이 없습니다.status: 부모 프로 세 스 에 의 해 가 져 옵 니 다 (낮은 8 자리, 한 바이트) 1) 프로 세 스 가 끝나 기 전에 열 린 상태 에 있 는 모든 파일 설명 자 를 닫 습 니 다.2) 모든 자식 프로 세 스 를 고아원 (init) 에 맡긴다.3) 부모 프로 세 스에 SIGCHLD 신 호 를 보 냅 니 다.메모: exit 함수 이것 도 이상 의 조작 을 수행 하기 때문에 바 텀 호출exit/_Exit. 4. 프로 세 스 의 마지막 스 레 드 가 마지막 문 구 를 실행 합 니 다.5. 프로 세 스 의 마지막 스 레 드 가 pthread 로 호출 되 었 습 니 다.exit 함수.5. 프로 세 스 의 이상 종료 1. abort 함 수 를 호출 하면 SIGABRT 신호 가 발생 합 니 다.2. 프로 세 스 가 일부 신 호 를 받 았 습 니 다 (캡 처 처리 가 없 거나 캡 처 처리 가 불가능 합 니 다).3. 프로 세 스 의 마지막 스 레 드 가 '취소' 요청 을 받 고 응답 을 하 는 것 은 스 레 드 가 '신호' 를 받 은 것 과 같 습 니 다.
6. wait/waitpid pidt wait(int *status); 기능: 모든 하위 프로 세 스 가 끝 날 때 까지 기다 리 고 최종 상태 코드 를 가 져 옵 니 다. 프로 세 스 가 끝나 면 바로 돌아 갑 니 다.
1. 부모 프로 세 스 가 하위 프로 세 스 가 보 낸 SIGCHLD 신 호 를 받 았 을 때 wait 함수 로 하위 프로 세 스 의 자원 을 회수 하고 종료 상 태 를 가 져 옵 니 다.2. 모든 하위 프로 세 스 가 실행 되 고 있다 면 wait 가 막 힙 니 다.3. 좀 비 프로 세 스 가 있 으 면 wait 도 즉시 돌아 와 자원 을 회수 하여 종료 상태 코드 를 가 져 옵 니 다.4. 하위 프로 세 스 가 없 으 면 실패 - 1 을 되 돌려 줍 니 다.
pid_t waitpid(pid_t pid, int *status, int options); 기능: 지정 한 프로 세 스 가 끝 날 때 까지 기다 리 고 최종 상태 코드 를 가 져 옵 니 다.pid: - 1 하위 프로 세 스 가 끝 날 때 까지 기 다 립 니 다. 이 때 wait 등가 > 0 대기 프로 세 스 번호 가 pid 인 프로 세 스 가 끝 날 때 까지 기 다 립 니 다. 이 때 는 하나의 프로 세 스 가 끝 날 때 까지 만 기 다 립 니 다 = 0 같은 그룹의 하위 프로 세 스 가 끝 날 때 까지 기 다 립 니 다. 이 때 는 전체 프로 세 스 그룹 options: WNOHANG 비 차단 모드 를 기다 리 고 있 습 니 다. 하위 프로 세 스 가 끝나 지 않 으 면 즉시 Wuntraced 를 종료 합 니 다.하위 프로 세 스 가 일시 정지 에서 계속 되면 상태 1, wait 함 수 는 하위 프로 세 스 가 끝 날 때 까지 외 롭 게 기다 릴 수 있 고 waitpid 는 더 많은 선택 을 할 수 있 습 니 다.2. waitpid 는 하위 프로 세 스 만 기다 릴 수 있 는 것 이 아니 라 같은 그룹 프로 세 스 도 기다 릴 수 있 습 니 다.3. waitpid 는 막 을 수도 있 고 막 지 않 을 수도 있 습 니 다.4. 하위 프로 세 스 의 일시 정지 또는 계속 상 태 를 감시 할 수 있 습 니 다.
7. vfork pidt vfork(void); 기능: fork 의 기능 과 기본적으로 일치 하 는 차이 점: vfork 를 통 해 만 든 프로 세 스 는 부모 프로 세 스 의 주소 공간 (데이터 세그먼트, bss 세그먼트, 더미, 스 택, IO 흐름, 버퍼 의 복사) 을 복사 하지 않 고 exec 시리즈 함수 로 실행 가능 한 프로그램 을 불 러 와 야 합 니 다.메모: vfork 를 실행 할 때 하위 프로 세 스 가 먼저 되 돌 아 옵 니 다. 이 때 부모 프로 세 스 의 주소 공간 을 차지 합 니 다. 하위 프로 세 스 가 성공 적 으로 생 성 된 후에 (exec 를 통 해 실행 가능 한 프로그램 을 불 러 옵 니 다) 부모 프로 세 스 가 되 돌 아 옵 니 다.
8. exec 기능: 하위 프로 세 스 의 실행 가능 한 파일 을 불 러 옵 니 다.int execl(const char *path, const char *arg, …); path: 실행 가능 한 파일 의 경로 arg: 첫 번 째 main 함수 의 인자 입 니 다. 마지막 으로 NULL 로 끝내 야 합 니 다.
int execlp(const char *file, const char *arg,…); file: 실행 가능 한 파일 의 이름 은 PATH 환경 변수의 경로 에서 실행 가능 한 파일 을 찾 아 실행 합 니 다.arg: 첫 번 째 main 함수 의 인자 입 니 다. 마지막 으로 NULL 로 끝내 야 합 니 다.int execle(const char *path, const char *arg,…, char * const envp[]); path: 실행 가능 한 파일 의 경로 arg: 첫 번 째 main 함수 의 인자 입 니 다. 마지막 으로 NULL 로 끝내 야 합 니 다.envp: 부모 프로 세 스 의 환경 변수 표, 하위 프로 세 스에 전달 합 니 다.
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[],char *const envp[]);

9. system int system (const char * command);기능: 시스템 명령 을 실행 하 는 경우 실행 가능 한 프로그램 을 불 러 올 수도 있 습 니 다.하위 프로 세 스 를 만 드 는 것 과 같 지만 하위 프로 세 스 가 끝나 지 않 습 니 다. 이 함수 가 돌아 오지 않 으 면 부자 프로 세 스 가 동시에 실행 되 지 않 습 니 다.이 함수 의 실현 은 vfork, exec, wait 등 함수 로 호출 되 어야 합 니 다.
10. 프로 세 스 그룹 프로 세 스 그룹: 하나 이상 의 프로 세 스 의 집합 입 니 다. 모든 프로 세 스 는 하나의 프로 세 스 ID 를 제외 하고 하나의 프로 세 스 그룹 ID 가 있 습 니 다. 프로 세 스 그룹의 프로 세 스 는 같은 작업 제어 에 속 합 니 다 (같은 작업 을 수행 합 니 다).같은 프로 세 스 그룹의 프로 세 스 는 터미널 의 신 호 를 통일 적 으로 받 습 니 다. fork 에서 만 든 하위 프로 세 스 는 기본적으로 부모 프로 세 스 의 프로 세 스 그룹 에 추 가 됩 니 다.
모든 프로 세 스 그룹 에 팀장 이 있 습 니 다. 팀장 의 프로 세 스 ID 는 그룹 ID pid 입 니 다.t getpgid(pid_t pid); 기능: pid 프로 세 스 의 프로 세 스 그룹 ID 가 져 오기
int setpgid(pid_t pid, pid_t pgid); 기능: 프로 세 스 pid 프로 세 스 의 프로 세 스 그룹 ID 를 설정 하면 pgid 프로 세 스 그룹 에 가입 하 는 것 과 같 습 니 다.pgid 가 팀장 입 니 다.

좋은 웹페이지 즐겨찾기