【发布时间】:2016-06-28 10:57:39
【问题描述】:
在 linux 内核 (4.5.5) 中,我已将 printk() 添加到 mm/filemap.c。
我添加的代码在__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 评估为真时,我得到一个连续的输出流(在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) 指的是哪个进程?
【问题讨论】:
-
您可能想在代码中打断一些行 -
printk()行的重要部分仅在我的屏幕上以编辑模式显示 -
@tofro 有趣。你不也得到那个代码块的水平滚动条吗?
-
task_pid_vnr(current)返回的虚拟PID是否出现在ps的输出中? -
内核中的pid有一点不同的含义,你应该使用tgid从用户空间的角度来匹配pid stackoverflow.com/questions/9305992/linux-threads-and-process
-
@buratino,
task_pid_vnr(current)只会在使用进程命名空间(例如在容器化环境中)时与task_pid_nr(current)不同。
标签: c linux shell linux-kernel