我正在研究一个使用struct作为函数参数的内核线程。
我像这样传递了它
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
答案 0 :(得分:0)
关闭这个问题,如果有人遇到同样的问题:
我在线程之外提出了结构。由于某种原因,在引用进入函数之前执行了释放。这导致了奇怪的错误,我通过将kfree放在另一个位置来解决它。