쓰레드에서 my_system 내에서 fork() 를 하면 죽어요.
글쓴이: jai / 작성시간: 금, 2003/12/26 - 10:41오전
int my_system(char *command)
{
pid_t pid;
int status;
if ((pid = fork()) < 0) {
return (-1);
}
if (pid == 0) {
char *argv[4];
argv[0] = "/bin/sh";
argv[1] = "-c";
argv[2] = command;
argv[3] = NULL;
status = execv(argv[0], argv);
return (-1);
}
if (waitpid(pid, &status, 0) < 0) {
return (-1);
}
if (!WIFEXITED(status) ||
(WIFEXITED(status) && WEXITSTATUS(status))) {
return (-1);
}
return ((status & 0xff00) >> 8);
}
- 데몬으로 동작하는 쓰레드입니다.
- 다른 코드에서는 my_system() 이 이상없이 동작합니다만,
my_system("mount /dev/hda5 /mnt/sample") 을 넘기면
fork() 하면서 해당 쓰레드만 죽어버립니다.
- 시스템에 ulimit -c unlimited 를 설정해서, segv 나오는 프로그램으로 core 가 만들어지는 것을 확인했습니다. 그런데 이 경우에는 core 도 안생겨서 어디서 죽는지만 확인할 수 있습니다.
또 항상 죽는 것도 아니고 3번 돌리면 1번 죽는 정도네요.
Forums:


지금 찾아볼수가 없어서 확실치는 않지만
종료시 시그널이 날라올텐데요
SIG_CHILD 메시지를 블럭(SIG_IGN)해 보세요.
그럼 될듯 한데요..
그럼 ^^
댓글 달기