【问题标题】:Get process id by its name in kernel space in linux在linux的内核空间中通过名称获取进程ID
【发布时间】:2012-06-12 11:54:32
【问题描述】:

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

【问题讨论】:

    标签: linux kernel signals


    【解决方案1】:

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

    【讨论】:

      【解决方案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;
      }
      

      【讨论】:

        猜你喜欢
        • 2023-04-10
        • 1970-01-01
        • 2014-11-02
        • 1970-01-01
        • 2012-05-12
        • 2016-01-21
        • 1970-01-01
        • 2012-10-09
        • 2014-11-03
        相关资源
        最近更新 更多