Я очень новичок в кодировании ядра. Поэтому, пожалуйста, извините меня, я задаю очень вопрос свалитьКак получить доступ к некоторой информации о текущем процессе в ядре linux
Я пытаюсь получить всю информацию о текущем запуске процесса в ядре linux. Вот что я пробовал:
#include <linux/kernel.h>
#include <linux/uaccess.h>
#include <linux/module.h>
#include <linux/sched.h>
#include "process_ancestors.h"
asmlinkage long sys_prs_anc(int arg){
//int counter = 0;
long pid;
char *process_name;
long process_state;
long process_owner_uid;
long voluntary_context_switches;
long involuntary_context_switches;
long num_children;
long num_siblings;
struct list_head *pos;
num_children = 0;
num_siblings = 0;
struct list_head children_list;
struct list_head siblings_list;
pid = current->pid;
process_name = current->comm;
process_state=current->state;
process_owner_uid = (current->cred)->uid;
children_list = current->children;
siblings_list = current->sibling;
voluntary_context_switches = current->nivcsw;
involuntary_context_switches = current->nvcsw;
list_for_each(pos, &children_list){
num_children ++;
}
list_for_each(pos, &siblings_list){
num_siblings ++;
}
return 0;
}
и я получаю следующее сообщение об ошибке, когда я построить его?
CHK include/config/kernel.release
CHK include/generated/uapi/linux/version.h
CHK include/generated/utsrelease.h
CALL scripts/checksyscalls.sh
CHK include/generated/compile.h
CC cs300/process_ancestors.o
cs300/process_ancestors.c: In function ‘sys_process_ancestors’:
cs300/process_ancestors.c:21:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
struct list_head children_list;
^
cs300/process_ancestors.c:26:6: error: incompatible types when assigning to type ‘long int’ from type ‘kuid_t’
uid = (current->cred)->uid;
^
make[1]: *** [cs300/process_ancestors.o] Error 1
make: *** [cs300] Error 2
Может ли кто-нибудь дать мне несколько советов, что я делаю неправильно?
... а также он должен использовать 'uid_t' тип для его' process_owner_uid' переменной. Потому что 'uid_t' является' unsigned int', и он использует тип 'long', который подписан (и может даже иметь другой размер, который' int'). –