1 / 11

EMMANUEL ADU 2004242136 (ex6-6, 6-7)

EMMANUEL ADU 2004242136 (ex6-6, 6-7). FORK. LINUX 운영 체제에서 사용자가 새로운 프로세스를 생성할 수 있는 유일한 방법은 fork 시스템 호출을 부르는 것이다 . fork 를 부른 프로세스를 부모 프로세스 라 부르고 , 새로 생성된 프로세스를 자식 프로세스 라고 부른다 . fork 시스템 호출 함수의 사용법은 다음과 같다. FORK.

minor
Download Presentation

EMMANUEL ADU 2004242136 (ex6-6, 6-7)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. EMMANUEL ADU 2004242136 (ex6-6, 6-7)

  2. FORK • LINUX 운영 체제에서 사용자가 새로운 프로세스를 생성할 수 있는 유일한 방법은 fork 시스템 호출을 부르는 것이다. • fork를 부른 프로세스를 부모 프로세스 라 부르고, 새로 생성된 프로세스를 자식 프로세스 라고 부른다. fork 시스템 호출 함수의 사용법은 다음과 같다.

  3. FORK • The fork() function creates a new process. The new process (child process) is an exact copy of the calling process (parent process) except as detailed below. • The child process has a unique process ID. • The child process ID also does not match any active process group ID. • The child process may have its own copy of the parent's message catalogue descriptors. • File locks set by the parent process are not inherited by the child process.

  4. GETPID() • The getpid() function returns the process ID of the calling process. • The _getpid function obtains the process ID from the system. The process ID uniquely identifies the calling process. • There is no error return.

  5. Fork:시스템호출 전 Pid: 12791 부모 프로세스 ID는 12791이고 Pid: 12791 Pid: 12793 Fork:시스템호출 후 자식 프로세스의 프로세스 번호는 12793이다 fork 시스템 호출 후 부모 프로세스는 12791을 유지하고 부모 프로세스 자식 프로세스

  6. 그러므로 부모 프로세스의 fork 호출 후의 반환값 rtn은 12793이고 • 자식 프로세스 에서의 fork 호출 반환값은 0이 된다.

  7. Source ex6-6 #include <stdio.h> main() { int getpid(), getppid(); printf("[%d] parent process id: %d\n",getpid(), getppid()); fork(); printf("\n\t[%d] parent process id: %d\n",getpid(), getppid()); printf("THIS IS FORK SYSTEM CALL TEST.\n"); } 현재 수행중인 프로세스의 ID를 출력한다 부모 및 자식프로세스의 ID를 출력한다.

  8. EX6-7 부모 프로세스는 대문자로 A에서 Z까지 출력하고 동시에 자식 프로세스는 소문자로 a에서z 까지 출력하는 프로그램을 작성하여, 두 개의 프로세스가 동시에 수행됩니다.

  9. ex6-7 main(argc,argv) int argc; char *argv[]; { char ch, first, last; int pid; long i; } } fork() 함수를 호출하면 부모 프로세스에 반환되는 값은 자식 프로세스의 프로세스 번호이기 때문에 항상0보다 크다 부모 프로세스이므로 대문자를 배정한다. fork() 호출시 자식 프로세스로 반환하는 값은 항상 0이다. 자식 프로세스이므로 소문자로 배정한다.

  10. fork() 시스템 호출이 실패했다 } } } 부모 프로세스와 자식 프로세스 모두 수행하는 공통 부분이다. 그러므로 각각 대문자 혹은 소문자를 A에서 Z까지 출력한다.

More Related