作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在编写一个内核模块来获取带有完整进程名称的 pid 列表。 proc_pid_cmdline()
给出完整的进程名称;使用相同的函数 /proc/*/cmdline
获取完整的进程名称。 (struct task_struct) -> comm
给出了它是什么进程的提示,但不是完整的路径。
我已经包含了函数名,但是它给出了错误,因为它不知道在哪里可以找到该函数。
如何在模块中使用proc_pid_cmdline()
?
最佳答案
您不应该调用 proc_pid_cmdline()
。
这是一个non-public function在 fs/proc/base.c
中:
static int proc_pid_cmdline(struct seq_file *m, struct pid_namespace *ns,
struct pid *pid, struct task_struct *task)
但是,它的作用很简单:
get_cmdline(task, m->buf, PAGE_SIZE);
虽然这不太可能返回完整路径,但也不可能在每种情况下都确定完整路径。 arg[0] 值可能会被覆盖,文件可能会被删除或移动等。一个进程可能会以一种隐藏原始命令行的方式执行(),以及各种其他问题。
扫描我的 Fedora 20 系统/proc/*/cmdline 会发现各种无用的结果:
-F
BUG:
WARNING: at
WARNING: CPU:
INFO: possible recursive locking detecte
ernel BUG at
list_del corruption
list_add corruption
do_IRQ: stack overflow:
ear stack overflow (cur:
eneral protection fault
nable to handle kernel
ouble fault:
RTNL: assertion failed
eek! page_mapcount(page) went negative!
adness at
NETDEV WATCHDOG
ysctl table check failed
: nobody cared
IRQ handler type mismatch
Machine Check Exception:
Machine check events logged
divide error:
bounds:
coprocessor segment overrun:
invalid TSS:
segment not present:
invalid opcode:
alignment check:
stack segment:
fpu exception:
simd exception:
iret exception:
/var/log/messages
--
/usr/bin/abrt-dump-oops
-xtD
关于linux - 如何在内核模块中使用 proc_pid_cmdline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25581465/
我正在编写一个内核模块来获取带有完整进程名称的 pid 列表。 proc_pid_cmdline() 给出完整的进程名称;使用相同的函数 /proc/*/cmdline 获取完整的进程名称。 (str
我是一名优秀的程序员,十分优秀!