zyl19861126 发表于 2010-03-23 20:11

求助, 关于linux内核下的进程监控问题。

老师给的毕业设计的题目是 linux进程监控系统, 要求用LKM来实现。

基本要求是:
    像ps、top那样打印进程的信息。
    进程的运行的命令,进程打开的网络端口,进程打开的文件。

看了 ULK v3后, 发觉可以通过遍历 tast_struct 来得到进程所要求的信息 。但tast_struct 中无法找到关于网络端口的信息,那该如何确定一个进程
打开了哪些网络端口了。

还有, 我进一步想做到 实习监控进程信息,但貌似很难,请各位给个建议和帮助。

duanjigang 发表于 2010-03-23 20:22

看看/proc文件系统和top命令的代码吧{:3_181:}

zyl19861126 发表于 2010-03-23 20:35

我现在是用 内核模块 来导出进程信息,并不是要用应用程序从/proc文件系统下来搜集 系统导出的进程状态。

re_load 发表于 2010-03-23 21:20

找网络通讯信息:
task_struct-->files_struct-->fd_array,
fd_array,-->fd-->sock_from_file()-->inet_sk()-->struct inet_sock。
基本相当于inet_sk(sock_from_file(fd_array))-->sport、dport、daddr、rcv_addr
最后得到是inet_sock结构体,里面有你需要的信息。
调用sock_from_file之前可以先判断下file是否是套接字,当然也可不判断,返回错误就不是套接字

zyl19861126 发表于 2010-03-23 21:28

谢谢。。原来 socket 还是从文件系统中得来的啊。。

re_load 发表于 2010-03-23 21:34

如果要求不严格的话可以隔一段时间扫描一次,这样做会有漏网之鱼。
如果想一个信息都不漏掉,可以hook一部分内核函数和轮询双管齐下。比方说sys_open、sys_fork、sys_execve、sys_bind、TCP/UDP的读写函数或者再靠下一层。

emmoblin 发表于 2010-03-23 21:41

建议你看看monitor开源开源项目

zyl19861126 发表于 2010-03-23 21:56

hook内核函数,这个我不会。 搜索资料的时候,发现一篇关于 linux进程实时监控的内核实现 的文章, 他说的 hook schedule()函数, 这个我觉得不错, 但我现在水平还不行,都不会hook。

我现在的基本想法就是将其实现为一个 字符设备 或者 从/proc文件系统中导出进程的信息,然后在用应用程程序来收集。

至于做到实时点,我初步的想法是用 内核线程在后台实时收集, 或用 tasklet 在每隔几个 jiffies 的时候来收集, 或者用timer_list来实现隔断时间来收集。。老师给的要求也不高,我就想,要做到实时点的话,就是在系统进程增加或减少的时候就立马报告信息就得了。

请各位给个意见。

zyl19861126 发表于 2010-03-23 21:58

建议你看看monitor开源开源项目
emmoblin 发表于 2010-03-23 21:41 http://linux.chinaunix.net/bbs/images/common/back.gif


请问是什么 monitor 开源项目, 我上网搜索了下, 就看见一个 mail monitor开源项目。

emmoblin 发表于 2010-03-23 22:29

http://sourceforge.net/projects/linux-mon/
页: [1] 2
查看完整版本: 求助, 关于linux内核下的进程监控问题。