2012-06-12 88 views
2

我正在使用嵌入式linux。 我需要从内核空间(内核模块)向某个用户空间进程发送一个信号。 由于PID是动态的,我需要获得此进程的pid才能向其发送信号? 它如何从内核空间的名称获取进程的PID?在linux的内核空间中获取进程ID的名字

回答

3

对于用户空间中的每个用户进程有一个相关的task_struct(这是一个循环链表)在内核space.Which拥有所有的工艺细节,所以,你可以步行穿过这一点,检查你的进程名。

写下例如

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; 
      } 
} 
2

过程不一定的名称。一个正在运行的程序可能已经改变了它的名字,所以你的计划只有在你试图找到的进程是协作和良好行为的情况下才有效。尝试以例如下面和(从不同的终端)RUN 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; 
} 
相关问题