쓰레드가 waitpid() 수행중에 죽어버려서요.

jai의 이미지

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이었습니다.
정상적으로 동작하는 경우도 있었구요.
어디가 이상한 건지 도체 찾아지질 않네요.