160 likes | 412 Views
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); 인수 : 자식 프로세스의 상태값을 받아올 변수
E N D
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_twait(int *status); • 인수 : 자식프로세스의 상태값을 받아올 변수 • 역할 : 부모가 자식보다 먼저 종료되는것을막기위해 자식 프로세스가 종료될때까지부모 프로세스를 일시 중단시킴. • 리턴 : 종료된 자식 프로세스의 PID • 정상일때 0, 에러일때-1
wait 함수 소개 [2] • pid_twait(int *status);
fork 함수 소개 • #include<unistd.h>pid_tfork(void); • 역할 : 호출이 성공하면 완전 같은프로세스를 생성, 전역변수와 로컬변수도 모두 복제.pid값만 0이 됨. • 리턴 • 정상 • 부모 프로세스 : 새로 생성된 자식 프로세스 PID • 자식프로세스 : 0 • 에러 : -1
execl함수 소개 • #include<unistd.h>intexecl( const char *path const char *arg, … ); • 첫번째 인수 : 실행파일의전체 경로 • 두번째 인수 : 인수, … • 맨마지막 인수 : NULL값이 들어가야함 • 역할 : 다른 프로그램을 실행하고 프로세스를 종료이 함수 밑의 구문은 실행되지 않음. • 리턴 : 실패할때만-1
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); }
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); }
6-14실행 화면 10016 = 1000000002>>8 = 1
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); }
6-15 소스 [2] printf ("부모 프로세스 : 자식 프로세스가 끝나길 기다립니다.\n"); while (wait((int *) 0) != -1) {} /* NULL */ printf ("부모 프로세스 : 모든 자식 프로세스가 끝났습니다.\n"); exit(0); }
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); }
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); }