쓰레드가 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:


댓글 달기