fork()함수 부모프로세스와 자식프로세스
글쓴이: vdsl88 / 작성시간: 월, 2012/05/28 - 5:29오후
#include
#include
#include
int main()
{
pid_t pid;
pid = fork();
if(pid<0){
fprintf(stderr, "Fork Failed");
return 1;
}
else if(pid==0){
sleep(10);
}
else{
printf("pid=%d\n", pid);
}
return 0;
}
저는 정답이 3번과 4번에서 많이 헷갈리는데
sleep인 상태에서도 프로세스는 살아있다라고 보는게 맞는 건지요??
또한 부모 프로세스가 종료하면 자식프로세스도 종료되는것도 맞는것 같은데
아래 문제의 답을 알수 있을까요?
Q.리눅스 시스템에서 다음 프로그램의 실행결과로 알맞은 것은?
1.부모 프로세스는 자신의 프로세스 pid 값을 출력하고 종료된다.
2.부모 프로세스가 먼저 종료된후 자식 프로세스의 부모 프로세스 pid는 1이다.
3.10초동안 자식 프로세스는 살아 있다.
4.부모 프로세스가 종료될때, 자식 프로세스도 종료된다
Forums:
이 소스에서, 2번과 3번은 항상 맞습니다. 4번은
이 소스에서, 2번과 3번은 항상 맞습니다.
4번은 사실이 아닙니다.
이 예제는 적용이 안되지만,
상황에따라 부모 프로세스가 session leader(또는 controlling process)
인 경우, 그 부모가 죽으면, 자식들에게 SIGHUP이 보내지기도 합니다.
하지만, 이것도 여러 조건들이 따라 붙으며, 보내기도 쉽지 않습니다.
또한, SIGHUP이 보내진다는것 자체가 자식이 죽어야한다는것을 의미하지도 않습니다.
단지, SIGHUP핸들러의 기본 설정이 termination일뿐입니다. 이것마저 자식에서
무시할수도 있죠.
아래문서를 참조
http://www.unixguide.net/unix/programming/1.15.shtml
리눅스에서는 ptctrl()을 이용하여, 부모가 죽을 때 특정 시그널이 보내지게 할수도 있습니다..
어쨋든, 여차저차해서 SIGHUP으로 자식을 죽인다하더라도, 이것은 부모로서 죽었을때의 경우가 아닌
session leader로서 죽었기때문에 발생하는경우입니다.
댓글 달기