#.프로세스 생성 - system 함수 사용하기
예제
결과
#.fork 함수 특징
1.fork 함수를 호출하면,
2. 새로운 프로세스를 생성한다.
3. fork 함수로 생성한 자식 프로세스의 메모리 공간은 부모 프로세스의 메모리 공간을 그대로 복사해 만든다.
4.fork 함수는 부모 프로세스에는 자식 프로세스 pid를 리턴하고, 자식 프로세스에는 0을 리턴한다.
#.자식프로세스가 상속 받는 대표적인 속성
1.실제 사용자 id
2.유효 사용자 id
3.실제그룹 id
4.유효 그룹 id
5.환경변수
6.열린 파일 기술자
7.시그널 처리 설정
8.현재 작업 디렉토리
#.프로세스 생성 - fork 함수 사용하기
예제
결과
#.프로세스 종료
유닉스는 프로세스가 종료되면 해당 프로세스가 어떻게 종료되었는지를 나타내는 종료 상태를 저장한다. 부모프로세스는 저장된 종료 상태 정보를 사용해 자식 프로세스가 어떻게 종료되었는지 알 수 있다. 자식 프로세스는 부모 프로세스에 자신이 어떻게 종료되었는지 알리는 종료 상태값을 리턴할 수 있다.
_exit 함수는 일반적으로 프로그램에서 직접 사용하지 않고, exit 함수에서 내부적으로 호출 한다. _exit 함수는 시스템 호출로, 프로세스를 종료할 때 다음과 같은 과정을 통해 시스템 관련 자원을 정리 한다.
1.모든 파일 기술자를 닫는다.
2.부모 프로세스에 종료 상태를 알린다.
3.자식 프로세스들에 sighup 시그널을 보낸다.
4.부모 프로세스에 sigchild 시그널을 보낸다.
5.프로세스 간 통신에 사용한 자원을 반납한다.
#.exit 와 atexit 함수 사용하기
예제
결과
#.exec 함수군 활용
exec 함수군을 사용해 명령이나 실행파일을 실행할 수 있다. exec 함수군은 인자로 받은 다른 프로그램을 자신을 호출한 프로세스의 메모리에 덮어쓴다. 따라서 프로세스가 수행 중이던 기존 프로그램은 중지되어 없어지고 새로 덮어쓴 프로그램이 실행된다. exec 함수군은 path 나 file에 지정한 명령이나 실행 파일을 실행한다.
#.execlp 함수 사용하기
예제
결과
#.execv 함수 사용하기
예제
결과
#execve 함수 사용하기
예제
결과
#.exec 함수군과 fork 함수
fork 함수로 생성한 자식 프로세스에서도 부모 프로세스와 같은 코드를 수행했다.
case 문으로 부모 프로세스와 자식 프로세스가 수행할 코드를 분리하기는 했지만,
기본적으로 같은 프로그램이다.
그러나 자식 프로세스에서 exec 함수군을 호출 하면 자식 프로세스는 부모 프로세스로부터
복사한 프로그램과는 다른 명령이나 프로그램을 실행할 수 있다.
예를들어 쉘에서 어떤 명령이나 파일을 실행하면, 쉘은 fork 함수로 자식 프로세스를 만들고,
사용자가 입력한 명령이나 파일을 exec 함수군을 사용해 자식 프로세스에서 실행한다.
이렇게 부모 프로세스와 자식 프로세스가 각기 다른 작업을 수행해야 할 때 fork 와 exec 함수를 같이 사용해야 한다.
#.exec 함수군과 fork 함수 사용하기
예제
결과
#.프로세스 동기화
정상적인 프로세스 종료 과정이라면, 자식 프로세스가 종료를 위해 부모 프로세스에 종료 상태 정보를 보내고,
부모 프로세스는 이 정보를 받으면, 프로세스 테이블에서 자식 프로세스를 삭제해야 한다.
그러나 자식 프로세스가 모든 자원을 반납했어도 부모 프로세스가 종료 상태 정보를 얻어가지 않거나 자식 프로세스보다 먼저 종료 하는 경우 발생한다.
실행을 종료한 후 자원을 반납한 자식 프로세스의 종료 상태 정보를 부모 프로세스가 얻어가지 않는 경우에는
좀비 프로세스가 발생한다. 좀비 프로세스는 프로세스 테이블에만 존재한다.
좀비 프로세스는 일반적인 방법으로 제거할 수 없으며, 부모 프로세스가 wait 관련 함수를 호출해야 사라진다.
#.wait 함수 사용하기
예제
결과
#.waitpid 함수 사용하기
예제
결과
예제파일
======================= 실습 2 =======================
#.프로세스 실행
#.결과
#.fork
#.결과
#.fork와 exec를 이용해서 새로운 프로세스 생성
#.결과
#.고아 프로세스
#.결과
#.데몬 프로세스
#.결과
참고 : 유닉스시스템 프로그래밍(한빛미디어) , Joinc
'컴퓨터 기초 > 운영체제 실습' 카테고리의 다른 글
12.head 명령어 실습 (0) | 2020.07.04 |
---|---|
[운영체제 실습] 11.시그널 (0) | 2020.07.03 |
[운영체제 실습] 9.프로세스 (0) | 2020.06.28 |
[운영체제 실습] 8.시스템 정보 다루기 - (그룹, 시간) (0) | 2020.06.27 |
[운영체제 실습] 7.시스템 정보 다루기 - (로그인, 패스워드 정보) (0) | 2020.06.27 |