在linux的内核空间中获取进程ID

我正在研究embedded式Linux。 我需要从内核空间(内核模块)向某个用户空间进程发送一个信号。 由于PID是dynamic的,我需要获得这个进程的pid发送一个信号给它? 如何从内核空间的名称获取进程的PID?

对于用户空间中的每个用户进程,在内核空间中都有一个关联的task_struct(这是一个循环链表)。其中包含所有进程的详细信息,因此您可以通过它来查看进程名称。

写下例子

for_each_process(task) { /* compare your process name with each of the task struct process name*/ if ( (strcmp( task->comm,your_process_name) == 0 ) ) { /* if matched that is your user process PID */ process_id = task->pid; } } 

进程不一定名字。 一个正在运行的程序可能已经改变了它的名字,所以你的计划只有在你试图找到的进程是协作和良好行为的情况下才有效。 尝试例如运行下面的程序和(从不同的终端)运行ps:

 #include <stdio.h> #include <unistd.h> int main(void) { int pid,rc; char *args[] = { "", "-", NULL }; pid = fork(); if (pid) { sleep(60); } else { execve( "/bin/cat" , args, NULL); } return 0; }