Ocean_
꾸준한 프로그래밍
Ocean_
전체 방문자
오늘
어제
  • 분류 전체보기 (174)
    • About Me (4)
    • 우아한테크코스 (27)
    • C & LINUX (50)
    • Operating System (12)
    • Database (25)
    • Computer Vision (0)
    • Problem Solving (0)
      • Programmers (0)
      • BOJ (0)
    • 코코코딩공부 (44)
      • Spring (12)
      • JAVA (14)
      • 디자인 패턴 (4)
      • 책 읽기 (4)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • DB
  • 우테코5기
  • C
  • C++
  • Linux
  • 우아한형제들
  • 백준
  • BOJ
  • 우테코
  • 운영체제
  • 트랜잭션
  • 정규화
  • 1259
  • bean
  • 우아한테크코스5기
  • 원시값 포장
  • signal
  • 우아한테크코스
  • 리눅스
  • 우테코 체스
  • 인덱스
  • 데이터 조작어
  • OS
  • SIGINT
  • 프로세스
  • OperatingSystem
  • 자바
  • 블랙잭
  • Spring
  • Operating System

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Ocean_

꾸준한 프로그래밍

C / LINUX wait(2) waitpid(2)
C & LINUX

C / LINUX wait(2) waitpid(2)

2022. 5. 2. 21:30

함수 기능

프로세스의 종료 상태를 회수하는 시스템 호출 함수

자식프로세스의 종료가 언제 발생할지 부모프로세스는 알 수 없으므로 커널은 시근ㄹ을 통해 부모 프로세스에게알림

 

wait

가장 먼저 종료된 자식 프로세스 기다림

 

waitpid

특정한 자식프로세스를 지정

함수 원형

#include <wait.h>
#include <sys/types.h>
pid_t wait(int *statloc);
pid_t waitpid(pid_t pid, int *statloc, int options);

함수 파라메터

statloc

종료될때 상태 값

 

pid

wait할 pid id

 

함수 예제

wait1

#include <stdio.h>
#include <stdlib.h> 
#include <unistd.h>
#include <sys/types.h> 
#include <sys/wait.h>
#define EXIT_CODE 1 
int main(void){

    pid_t pid;
    int ret_val, status;

    /*
        프로세스를 fork하고 프로세스들의 상태를 출력
    */
    if (( pid = fork()) == 0) {
        printf ("child: pid = %d ppid = %d exit_code = %d\n", 
                getpid(), getppid(), EXIT_CODE);
        exit(EXIT_CODE);
    }

    printf ("parent: waiting for child= %d\n", pid); 
    
    /*
        프로세스 정상 종료시 exit비트는 status로 전달 된다. &연산을 통해 1이 출력된다
    */
    ret_val = wait(&status); 
    printf (" parent: return value = %d, ", ret_val); 
    printf (" child's status= %x", status); 
    printf (" and shifted= %x\n", (status>> 8)); 
    exit(0);
    }

wait2

#include <stdio.h>
#include <stdlib.h> 
#include <unistd.h>
#include <sys/types.h> 
#include <sys/wait.h>

/*  
    "/bin/echo" 에 리스트형태로 exec해주는 것이다.
*/
int main(void){
    if (fork() == 0) 
        execl("/bin/echo", "echo", "this is", "message one", (char *)0); 
    
    if (fork() == 0) 
        execl("/bin/echo", "echo", "this is", "message Two", (char *)0); 

    printf ("parent: waiting for children\n");
    /*
        wait가 에러가 없을경우 parent는 죽는다.
        자식들이 출력되고 부모프로세서가 죽는다.
    */
    while (wait((int *)0) != -1);
    printf ("parent: all children terminated\n"); 
    exit(0);

}

함수 결과

wait1

wait2

 

리눅스시스템 프로그래밍 - 홍지만 저

교재 내에 있는 예제를 바탕으로 작성한 글 입니다.

'C & LINUX' 카테고리의 다른 글

C/LINUX _t 자료형  (0) 2022.05.04
C / LINUX execl(3), execv(3), execle(3), execve(2), execlp(3), execvp(3)  (0) 2022.05.02
C / LINUX getpid(2) getppid(2) getuid(2) geteuid(2) getgid(2) getegid(2)  (0) 2022.05.02
C / LINUX setjmp(3) longjmp(3)  (0) 2022.05.02
C / LINUX vfork()  (0) 2022.05.02
    'C & LINUX' 카테고리의 다른 글
    • C/LINUX _t 자료형
    • C / LINUX execl(3), execv(3), execle(3), execve(2), execlp(3), execvp(3)
    • C / LINUX getpid(2) getppid(2) getuid(2) geteuid(2) getgid(2) getegid(2)
    • C / LINUX setjmp(3) longjmp(3)
    Ocean_
    Ocean_
    dongVeloper

    티스토리툴바