task_pid_nr(current)返回一个不会出现在ps输出中的pid

时间:2016-06-28 10:57:39

标签: c linux shell linux-kernel

在linux内核(4.5.5)中,我向mm/filemap.c添加了printk()

我添加的代码位于__generic_file_write_iter()

if(io_tracing_on) {
        ssize_t write_size = iov_length(from->iov, from->nr_segs);
        printk(KERN_INFO "write size=%zu, pid=%d, inode=%lu\n", write_size, task_pid_nr(current), inode->i_ino);
}

io_tracing_on评估为true时,我得到一个连续的输出流(在different question中讨论),如下所示:

Jun 27 15:00:41 malka kernel: [  463.424155] write size=168, pid=715, inode=7864653
Jun 27 15:00:41 malka kernel: [  463.428064] write size=168, pid=715, inode=7864354

在这个连续的输出流中,我试图将pid(715)映射到ps -ef的输出,但无效 - 进程列表中不存在pid。有没有办法让我确定task_pid_nr(current)指的是哪个流程?

1 个答案:

答案 0 :(得分:1)

内核中的pid有点different meaning,你应该使用tgid来匹配来自用户空间的pid