쓰레드에서 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)해 보세요.
그럼 될듯 한데요..
그럼 ^^
댓글 달기