1 / 16

wait

2004242066 엄태정. Ex 6-14 6-15 6-16. wait. 목차. 함수 소개 함수 소개 함수 소개. wait () fork () execl () 소스 설명 6-14, 6-15, 6-16 실행 화면. wait 함수 소개 [1]. #include<sys/ types.h > #include<sys/ wait.h > pid_t wait ( int *status); 인수 : 자식 프로세스의 상태값을 받아올 변수

Download Presentation

wait

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. 2004242066 엄태정 Ex 6-14 6-15 6-16 wait

  2. 목차 • 함수 소개 • 함수소개 • 함수소개 • wait() • fork() • execl() • 소스 설명 • 6-14, 6-15, 6-16 • 실행 화면

  3. wait 함수 소개 [1] • #include<sys/types.h> #include<sys/wait.h>pid_twait(int *status); • 인수 : 자식프로세스의 상태값을 받아올 변수 • 역할 : 부모가 자식보다 먼저 종료되는것을막기위해 자식 프로세스가 종료될때까지부모 프로세스를 일시 중단시킴. • 리턴 : 종료된 자식 프로세스의 PID • 정상일때 0, 에러일때-1

  4. wait 함수 소개 [2] • pid_twait(int *status);

  5. fork 함수 소개 • #include<unistd.h>pid_tfork(void); • 역할 : 호출이 성공하면 완전 같은프로세스를 생성, 전역변수와 로컬변수도 모두 복제.pid값만 0이 됨. • 리턴 • 정상 • 부모 프로세스 : 새로 생성된 자식 프로세스 PID • 자식프로세스 : 0 • 에러 : -1

  6. execl함수 소개 • #include<unistd.h>intexecl( const char *path const char *arg, … ); • 첫번째 인수 : 실행파일의전체 경로 • 두번째 인수 : 인수, … • 맨마지막 인수 : NULL값이 들어가야함 • 역할 : 다른 프로그램을 실행하고 프로세스를 종료이 함수 밑의 구문은 실행되지 않음. • 리턴 : 실패할때만-1

  7. 6-14 소스 [1] #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h> #define EXIT_CODE 1 main(intargc, char *argv[]) { intpid, ret, status, fork(), wait(); void exit(); if ((pid = fork()) == 0) { printf ("자식 프로세스 : pid = %d, ppid = %d, exit_code = %d\n", getpid(), getppid(), EXIT_CODE); exit(EXIT_CODE); }

  8. 6-14 소스 [2] printf ("부모 프로세스 : 자식 프로세스(%d)를 기다림.\n", pid); ret = wait(&status); printf ("부모 프로세스 : 리턴값= %d, ", ret); printf ("자식 프로세스 상태 = %x", status); printf (" and 8번 쉬프트= %x\n", (status >> 8)); exit(0); }

  9. 6-14실행 화면 10016 = 1000000002>>8 = 1

  10. 6-15 소스 [1] #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> main (intargc, char *argv[]) { int fork(), wait(); if (fork() == 0){ execl ("/bin/echo","echo"," - ","1번 자식 프로세스 동작중”,NULL); } if (fork() == 0){ execl ("/bin/echo","echo"," - ","2번 자식 프로세스 동작중.“,NULL); } if (fork() == 0){ execl ("/bin/echo","echo"," - ","3번 자식 프로세스 동작중.“,NULL); }

  11. 6-15 소스 [2] printf ("부모 프로세스 : 자식 프로세스가 끝나길 기다립니다.\n"); while (wait((int *) 0) != -1) {} /* NULL */ printf ("부모 프로세스 : 모든 자식 프로세스가 끝났습니다.\n"); exit(0); }

  12. 6-15실행화면

  13. 6-16 소스 [1] #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> main (intgarc, char *argv[]) { int child1, child2, fork(); intpid, status, wait(); if ((child1 = fork()) == 0) { execl ("/bin/date","date", NULL); } if ((child2 = fork()) == 0) { execl ("/usr/bin/who","who", NULL); }

  14. 6-16 소스 [2] printf ("부모 프로세스 : 자식 프로세스가 끝나길 기다립니다.\n"); while ((pid = wait(&status)) != -1) { if(child1 == pid) printf ("부모 프로세스 : 첫번째 자식 프로세스 = %d\n", (status>>8)); else if(child2 == pid) printf ("부모 프로세스 : 두번째 자식 프로세스 = %d\n", (status>>8)); } printf ("부모 프로세스 : 모든 자식 프로세스가 끝났습니다.\n"); exit(0); }

  15. 6-16 실행화면

  16. The end..

More Related