首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在linux内核空间中按名称获取进程id

问在linux内核空间中按名称获取进程id
EN

Stack Overflow用户
提问于 2012-06-12 19:54:33
回答 2查看 4.9K关注 0票数 2

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

EN

回答 2

Stack Overflow用户

发布于 2012-06-12 20:07:57

对于用户空间中的每个用户进程,在内核space.Which中都有一个关联的task_struct(一个循环链表),其中包含所有进程的详细信息,因此您可以遍历该all并检查您的进程名。

写下示例

代码语言:javascript
复制
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;
           }
}
票数 3
EN

Stack Overflow用户

发布于 2012-06-12 20:20:10

进程不一定要有名称。正在运行的程序可以更改其名称,因此只有当您尝试查找的进程是协作性和行为良好的时,您的计划才有效。例如,尝试运行下面的程序并(从不同的终端)运行ps:

代码语言:javascript
复制
#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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10996137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档