clone()함수를 사용하여 쓰레드를 생성할 때 사용되는 인자값에 대해서 궁금합니다.
// clone과 pid, tgid에 대한 예
#include
#include
#include
#include
#include
#include
int sub_func_b(voud *arg){ printf("TGID(%d), PID(%d) : Child \n", getpid(), syscall(__NR_gettid));
return 0;
}
int main(void){ int pid;
int child_a_stack[4096], child_b_stack[4096];
printf("before clone \n \n");
printf("TGID(%d), PID(%d) : Parent \n", getpid(), syscall(__NR_gettid));
// clone()의 인자로 CLONE_CHILD_CLEARID와 CLONE_CHILD_STTID를 설정하면
// 리눅스 커널은 태스크를 생성할 때 프로세스로 해석될 수 있도록 자원 공유가 되지 않은 형태로 생성하게 된다
// clone()의 인자로 CLONE_THREAD를 설정하면 태스크를 생성할 때 쓰레드로 해석될 수 있도록
// 자원 공유가 되는 형태로 생성한다.
clone(sub_func, (void *)(child_a_stack+4095), CLONE_CHILD_CLEARID | CLONE_CHILD_SETTID, NULL);
clone(sub_func, (void *)(child_b_stack+4095), CLONE_VM | CLONE_THREAD |
CLONE_SIGHAND, NULL);
sleep(1);
printf("after clone \n \n");
return 0;
}
위의 소스코드에서 clone함수의 두 번째 인자에 (void *)(child_a_stack+4095) 가 어떤 의미인지 궁금합니다.
댓글 달기