본문 바로가기

시스템

[시스템 프로그래밍] error handling wrapper / pid / process states

Error Handling Wrapper

system-level operations는 대부분 에러가 난다. 그래서 에러 핸들링을 명시적으로 할 필요가 있다.

에러 핸들링 코드를 줄줄 써놓으면 전체 코드가 복잡해지니, 에러를 핸들링하는 wrapper함수를 만들어보자.

Linux는 에러가 나면 -1을 return하고, 전역변수 errno에 그 원인을 적어준다.

<error reporting wrapper func>
void reporting_error(char *error_msg){
    fprintf(stderr, "%s : %s\n", error_msg, strerror(errno)); //에러 메시지 : 에러 넘버
    exit(1); //비정상 종료
}

<usage>
if( (pid = fork()) < 0) {
    reporting_error("fork error");
}

 

PID

: 각 process가 가지고 있는 고유 integer ID

 

Process states

간단히 3개의 states로 나눠보자.

▷ Running (Active) : 실행 중 or 스케줄링 기다리는 중

▷ Stopped (Blocked) : 멈춰서 signal 오기 전까지는 스케줄링도 안 됨

▷ Terminated (not Reaped, Zombie) : 종료되었지만 아직 reap 안 됨