__clone에 관련한 질문입니다.
posix lib가 없는 환경에서 작업을 하게 되었습니다.
__clone이 있으니 상관이 없겠지 라고 생각했는데 있는건 오랬동안 알았지만 막상 처음 사용하는것이라 많이 생소합니다.(-_-;)
int __clone(int (*fn) (void *arg), void *child_stack, int flags, void *arg)
의 파라메터 중에서 void *child_stack 이걸 어떻게 해야할지 좀 감이 않옵니다.
pthread에서 스텍사이즈를 지정하는 것 처럼 원하는 크기의 메모리공간을 만들어서 주면 되겠지 싶어서 일단은 아래와 같이 해서 작업을 하였습니다.
int threadkick(void *arg);
struct argu{
int flags;
char *name;
}
...대충 줄입니다.
struct argu *param;
void *temp;
param = (struct argu *)malloc(size_of(struct argu));
temp = malloc(sizeof(char)*4096);
ret = __clone(threadkick, temp, CLONE_VM, param);
컴파일이나 동작시 에러 발생은 안하는데 파레메터로 전달한 함수포인터가 동작을 하지 않는군요. (변수선언 이후에 단순한 출력문으로 체크하였습니다만 감감 무소식이군요.)
__clone을 포함한 단순한 예제나 아니면 정확한 호출형식을 알 수 있었으면 합니다.(다른 부분들은 필요없고, __clone의 파라메터로 쓰인 함수포인터 proto type과, __clone을 포함한 한 줄이면 됩니다.)
부탁드리겠습니다. 수고하십시요.
[code:1]#include<sched.h>int c
관심이 생겨서 저도 한번 해봤는데요..
스택을 그냥 부모 스택 안에 잡아버렸는데 일단 실행은 되는군요..
스택의 방향까지는 계산해보지 않아서 정확히 쓴지는 모르겠지만.. 어쨌든 이렇네요. ^_^
void* child_stack= malloc(1024); 이렇게 힙에 잡으니
start of main
return =24652
Segmentation fault
에러가 나고요..
char child_stack[1024]; 를 함수 밖으로 빼서 global로 만들고 해보니 에러는 안나지만
start of main
return =24661
프린트가 안되는군요.
rommance.net
감사합니다.
일단은 그렇게 작업을 하고 있어야 겠군요^^;
또한 다시한번 정확한 사용법을 알고 계신분이 있다면 알려주시길 부탁드리겠습니다.
수고하십시요.
댓글 달기