2012-06-12 87 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; 
} 
相關問題