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

时间:2012-06-12 11:54:33

标签: linux kernel signals

我正在研究嵌入式Linux。 我需要从内核空间(内核模块)向某个用户空间进程发送信号。 由于PID是动态的,我需要获取此进程的pid以向其发送信号? 如何从内核空间中的名称获取进程的PID?

2 个答案:

答案 0 :(得分:3)

对于用户空间中的每个用户进程,内核空间中都有一个关联的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;
           }
}

答案 1 :(得分:2)

进程不一定拥有名称。正在运行的程序可以更改其名称,因此,只有在您尝试查找的流程具有协作性和良好行为时,您的计划才有效。例如,尝试运行下面的程序并(从另一个终端)运行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;
}