2014-01-30 103 views
1

我正在使用一個結構作爲函數參數的內核線程。將結構傳遞給函數指針 - 值改變

我通過像這樣

int thread_function(void* data) 
{ 
    struct killStruct* obj = (struct killStruct*) data; 
    //msleep((unsigned int) time); 
    printk(KERN_INFO"From the inner Thread: PID: %d, Time:%ld\n",obj->pid,obj->millisecondsToKill); 
    //kill prozess by ID 
    return 0; 
} 

static void prozess_kill(struct killStruct *obj) 
{ 
    printk(KERN_INFO "Outside of thread PID: %d, Time:%ld",obj->pid,obj->millisecondsToKill); 
    task = kthread_run(&thread_function,(void*)obj ,"str"); 
} 

一些奇怪的原因PID值是不同的外螺紋的比線程內。

事實上它記錄:

[12160.460200] Outside of thread PID: 1, Time:1000 
[12160.460400] From the inner Thread: PID: 622736, Time:1000 

這到底是怎麼回事?

注意:我檢查了其他pid值。它最終總是爲622736

+1

在C中,不需要將指針指向'void *'。任何指針都可以隱式轉換爲void *'。 –

+1

你如何調用'prozess_kill'? 'killStruct'對象的生命週期是什麼? –

+1

也許被其他進程修改。嘗試malloc一些內存並複製數據並將其傳遞到「thread_function」以查看差異。 –

回答

0

要關閉這個問題,如果有人陪跑了同樣的問題:

我jfreed的線程之外的結構。出於某種原因,釋放是在參考進入函數之前執行的。這導致了奇怪的錯誤,我通過將kfree放置在另一個位置來解決它。