мне удалось решить версию этой проблемы. Я хотел получить доступ к cmdline
для всех PID, но в самом ядре (в отличие от ядра ядра , как утверждается в вопросе), но, возможно, эти принципы могут применяться и к модулю ядра?
То, что я был, я добавил следующую функцию fs/proc/base.c
int proc_get_cmdline(struct task_struct *task, char * buffer) {
int i;
int ret = proc_pid_cmdline(task, buffer);
for(i = 0; i < ret - 1; i++) {
if(buffer[i] == '\0')
buffer[i] = ' ';
}
return 0;
}
Затем я добавил заявление в include/linux/proc_fs.h
int proc_get_cmdline(struct task_struct *, char *);
На данный момент, я мог бы получить доступ к cmdline
всех процессов в ядро. Чтобы получить доступ к task_struct
, возможно, вы можете обратиться к kernel: efficient way to find task_struct by pid?.
После того как вы task_struct
, вы должны быть в состоянии сделать что-то вроде:
char cmdline[256];
proc_get_cmdline(task, cmdline);
if(strlen(cmdline) > 0)
printk(" cmdline :%s\n", cmdline);
else
printk(" cmdline :%s\n", task->comm);
я смог получить командную строку всех процессов таким образом.
Вам нужно будет определить, что такое имя процесса, поскольку Linux (и Unix) вообще не использует имена процессов. – wallyk