쓰레드에서 my_system 내에서 fork() 를 하면 죽어요.

jai의 이미지

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번 죽는 정도네요.

ftfuture의 이미지

종료시 시그널이 날라올텐데요
SIG_CHILD 메시지를 블럭(SIG_IGN)해 보세요.

그럼 될듯 한데요..

그럼 ^^