2016-06-28 33 views
0

在linux內核(4.5.5)中,我添加了一個printk()mm/filemap.ctask_pid_nr(current)返回一個pid,它沒有出現在ps的輸出中

,我已經添加的代碼是__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)所指的是什麼過程?

+0

您可能要打破你的一些代碼行 - 只有'的printk的重要組成部分()'行在我的屏幕上顯示編輯模式 – tofro

+0

@tofro有趣的。你是否還沒有獲得該代碼塊的水平滾動條? – buratino

+1

'ps'的輸出中是否出現'task_pid_vnr(current)'返回的虛擬PID? –

回答

1

在內核中的PID有一點點different meaning,你應該使用TGID從用戶空間的角度匹配PID