Я работаю над потоком ядра, который использует аргумент struct как функцию.Передача struct to function pointer - Изменения значения
Я передал его как этот
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");
}
По какой-то странной причине значение ПИД-регулятора отличается вне нити, чем внутри нити.
На самом деле он записывает:
[12160.460200] Outside of thread PID: 1, Time:1000
[12160.460400] From the inner Thread: PID: 622736, Time:1000
Что здесь происходит?
Примечание: Я проверил другие значения для pid. Это всегда заканчивается как 622736
В C нет необходимости указывать указатели на 'void *'. Любой указатель может быть неявно преобразован в 'void *'. –
Как вы называете 'prozess_kill'? Какова продолжительность жизни объекта 'killStruct'? –
Может быть изменен другим процессом. Попробуйте malloc некоторую память и скопируйте данные и передайте их в "thread_function", чтобы увидеть разницу. –