我正在研究嵌入式Linux。我需要从内核空间(内核模块)向某些用户空间进程发送信号。由于 PID 是动态的,我需要获取该进程的 pid 以向其发送信号吗?它如何从内核空间中的进程名中获取进程的PID?
问问题
4989 次
2 回答
4
对于用户空间中的每个用户进程,内核空间中都有一个关联的 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;
}
}
于 2012-06-12T12:07:57.400 回答
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;
}
于 2012-06-12T12:20:09.913 回答