【问题标题】:task_pid_nr(current) returns a pid that doesn't appear in the output of pstask_pid_nr(current) 返回一个没有出现在 ps 输出中的 pid
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-25
    • 2012-01-11
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    相关资源
    最近更新 更多