1
我必須爲我的課堂作業編寫一個線程示例。不知何故,我通過copy()創建了我的子進程之後得到了一個Segfault(必須使用那個可悲的)。Linux中的線程C程序中的Segfault
void thread(void);
#define CLONE_VM 0x00000100
#define ANSWER_TRUE "t"
#define ANSWER_FALSE "f"
static char stack[2];
int main(void) {
void** childThreadBP = NULL;
void** childThread = NULL;
int pid = 0;
puts("create stack for child process...");
void ** new_stack = (void **) malloc(128);
//new_stack = (void **) ((char *)new_stack + 128);
puts("create child process...");
pid = clone(thread, new_stack, CLONE_VM, NULL);
puts("write PID to shared stack...");
stack[0] = (char) pid;
puts("child answered:");
while(1){}
if (stack[1] == ANSWER_TRUE) {
puts("PIDs are equal.");
}
else {
puts("PIDs are NOT equal.");
}
return EXIT_SUCCESS;
}
void thread(void) {
puts("[child]: I'm alive!");
int pidSelf;
pidSelf = getpid();
if (pidSelf == (int)stack[0]) {
puts("[child]: dad the PID you gave me is correct!");
stack[1] = ANSWER_TRUE;
}
else {
puts("[child]: dad the PID you gave me is NOT correct!");
stack[1] = ANSWER_FALSE;
}
}
也許你看到我的錯誤是... - 代碼格式有什麼問題?
我只是需要幫助固定賽格故障 - 其餘的應該沒問題(我認爲))
的問候!
爲什麼使用clone(2)而不是pthreads庫? –
128字節?嘗試128K字節。 –
@AdamRosenfield:因爲我們必須......:/ – reijin