fork()하고 부모가 먼저 죽은 후 자식의 표준입출력 동작에 대해
글쓴이: lnsium / 작성시간: 금, 2005/06/03 - 1:14오전
fork하고 부모가 먼저 죽으면 자식이 표준입출력에 대해 어떤 동작을 하더라도 무시되는 현상을 보입니다.
fork시 자식에게도 파일기술자가 복제되어 유효한 걸로 알고 있는데 부모가 죽으면서 파일기술자를 닫는다고 자식에게까지 영향을 주는 것인지 이것이 의문입니다.
#include <unistd.h> #include <stdio.h> int main() { char buf[BUFSIZ]; switch(fork()) { case -1: exit(1); case 0: sleep(1); fgets(buf, BUFSIZ-1, stdin); printf("I am child\n"); while(1) sleep(1); exit(0); } fgets(buf, BUFSIZ-1, stdin); printf("I am parent\n"); exit(0); }
fork후 자식이 먼저 동작해서 sleep으로 부모가 먼저 동작하고 죽게 만들었습니다. 이후 자식의 표준입력과 표준출력 모두 동작하지 않습니다.
더욱 의심스러운것은 while루프가 있는데도 자식프로세스가 죽어버린다는 겁니다. 이거참 어떻게 해석해야할지 난감합니다.
Forums:
setsid()
setsid()
setsid()...-.-;;
setsid로 자식이 죽지않게 하는 방법은 조금 알고 있습니다. 데몬만들 때 쓰더군요. 세션그룹과 관계가 있는 걸루 아는데 자세히 설명해 주시면 좋을텐데...
저가 궁금한 것은 파일입출력에 대한 이상동작입니다. 정말 부모가 죽으면 부모가 열었던 파일기술자들이 자식에게도 무효하게 되는지...
자식프로세스는 죽지 않습니다.코드를 다음과 같이,[code:1]
자식프로세스는 죽지 않습니다.
코드를 다음과 같이,
하여 돌려보시고, 자식의 pid를 ps로 검사해보세요.
참고로 다음을 보시기 바랍니다.
댓글 달기