전체적 서비스 제공 시간이 조금 늦어져도 모든 클라에게 동시 서비스 제공이 좋다
프로세스
fork()
fork()를 호출한 프로세스를 복사하는 것int gval = 10;
int main(int argc, char *argv[])
{
pid_t pid;
int lval=20;
gval++, lval+=5;
pid=fork();
if(pid==0) // if child
{
gval+=2, lval+=2;
printf("Child Proc: [%d, %d] \n", gval, lval);
}
else // if parent
{
gval-=2, lval-=2;
printf("Parent Proc: [%d, %d] \n", gval, lval);
}
return 0;
}
ps au로 프로세스 확인 가능
fork로 생성한 자식 프로세스가 종료되는 상황
좀비 프로세스
int main(int argc, char *argv[])
{
pid_t pid=fork();
if(pid==0) // if child
{
puts("Hi, I am child process");
puts("End child process");
}
else
{
printf("Child Process ID: %d \n", pid);
sleep(30);
puts("End parent process");
}
return 0;
}

wait() 함수
int main(int argc, char *argv[])
{
int status;
pid_t pid=fork();
if(pid==0)
{
return 3;
}
else
{
printf("Child PID: %d \n", pid);
pid=fork();
if(pid==0)
{
exit(7);
}
else
{
printf("Child PID: %d \n", pid);
wait(&status);
if(WIFEXITED(status))
printf("Child send one: %d \n", WEXITSTATUS(status));
wait(&status);
if(WIFEXITED(status))
printf("Child send two: %d \n", WEXITSTATUS(status));
sleep(30);
}
}
return 0;
}

waitpid()는 좀비 프로세스 생성 막으면서도 블로킹 문제 해결한다
int main(int argc, char *argv[])
{
int status;
pid_t pid=fork();
if(pid==0)
{
sleep(15);
return 24;
}
else
{
while(!waitpid(-1, &status, WNOHANG))
{
sleep(3);
puts("sleep 3sec.");
}
if(WIFEXITED(status))
printf("Child send %d \n", WEXITSTATUS(status));
}
return 0;
}