쓰레드가 waitpid() 수행중에 죽어버려서요.
글쓴이: jai / 작성시간: 목, 2003/10/30 - 12:56오전
int j_system(char *command) { pid_t pid; char *argv[4]; int status; argv[0] = "/bin/sh"; argv[1] = "-c"; argv[2] = command; argv[3] = NULL; if((pid = fork()) < 0) { perror("fail to fork\n"); return(-1); } else if(pid == 0) { status = execv(argv[0], argv); if(status < 0) { perror("execv() error\n"); return(-1); } } if(waitpid(pid, &status, 0) < 0) /* 죽습니다. */ { perror("waitpid error"); return(-1); } if(WIFEXITED(status) == 0) { return(-1); } /* 0 : success, other values : fail */ return((status & 0xff00) >> 8); }
1. fork 한 후 execv() 수행결과를 받아오는 프로그램입니다.
2. 인자로 넘겨준 command 가 수행되는 것으로 보아 자식 프로세스의 execv() 수행은 성공하는 것 같습니다.
3. 부모는 데몬이 pthread_create() 로 생성한 쓰레드입니다만 데몬까지 같이 죽네요.
4. 파일에 라인을 찍어봤습니다. waitpid() 직전라인까지 찍는 것으로 보아 waitpid() 에서 죽는 것 같습니다.
운영체제는 솔라리스8.0이었습니다.
정상적으로 동작하는 경우도 있었구요.
어디가 이상한 건지 도체 찾아지질 않네요.
Forums:
댓글 달기