시스템 프로그래밍-프로세스 다루기

YuWan·2024년 7월 1일

linux

목록 보기
11/26

리눅스 프로세스(태스크) 상태 확인

  • R:Running:실행 상태
  • S:Sleeping:대기 상태
  • W:Waiting:준비 상태
  • S:Stopped:종료 상태
  • Z:Zombie:프로세스 종료 후 자원이 반환되었지만 커널 영역에 프로세스가 남아 있는 상태

Fork-exec

  • fork:복사본 만들기
  • exec:새로운 코드로 대체(덮어쓰기)

프로세스 생성하기-fork

pid_t fork(void);
  • Parameter
    • 없음
  • Return
    • 성공시(부모 프로세스의 경우) 자식 프로세스의 PID.(자식 프로세스의 경우) 0
    • 실패시(부모 프로세스의 경우)-1, (자식 프로세스의 경우) 미생성

PID와 PPID

pid_t getpid(void);
pid_t getppid(void);
  • Parameter
    • 없음
  • Return
    • getpid:현재 프로세스의 PID
    • getppid:부모 프로세스의 PID

새로운 프로그램으로 프로세스 메모리 채우기-exec family

  • 함수 명의 알파벳
    • l:리스트 형식으로 인자 전달(arg0, arg1, .., NULL)
    • v:벡터(문자열) 형식으로 인자 전달
    • p:기본 환경 변수($PATH)에서 찾음
    • e:새로운 환경 변수 설정 가능
  • Return
    • 성공시 리턴 없음
    • 실패시 -1
  • 환경 변수 PATH:실행 파일의 경로
  • export PATH=$PATH

종료-exit

void exit(int status);
  • Parameter
    • status:종료 상태(0==정상 종료, 이외==비정상)
  • Return
    • 없음

자원의 반환

  • 자식 프로세스가 종료되었을때 부모 프로세스가 종료를 처리해주지 않으면 자식프로세스는 Zombie Process가 된다.
  • Zombie Process
    • 프로세스는 종료되었으나 부모 프로세스가 종료를 처리하지 않아 커널이 관리하는 프로세스 목록(프로세스 테이블)에 남아있는 상태 자원의 완전한 해제가 이루어지지 않음->자원 낭비

자식 프로세스가 종료할 때까지 대기하기

pid_t wait(int *wstatus);
  • Parameter
    • wstatus:종료된 child process의 상태 저장(포인터가 가리키는 변수에 자식 프로세스 종료시 리턴하거나 exit함수 호출시 전달한 인자값이 저장됨)
  • Return
    • 성공시 종료된 자식프로세스의 PID
    • 실패시 -1
  • waitpid, wait4
profile
공부 블로그

0개의 댓글