linux下打印系统进程树

要求编写程序,获取系统当前执行进程的信息,并以树状结构打印所有系统进程。

     分析问题,其包括两个部分,一是打印当前进程信息:首先要明确需要打印进程的哪些信息,首先肯定是进程标志符信息,包括进程ID、PID(父进程ID)和进程组ID(PGID),其次是进程名称信息;二是打印系统进程树:这要求列出系统所有进程,并以树状结构体现进程之间的关系(兄弟和父子等)

     明白了问题需求,就可以开始寻求解决方法了。

     一、准备知识

     了解linux进程与线程:包括linux进程结构、linux进程状态、linux进程管理与控制。这里涉及到很多方面的知识,比如:信号、用户态和内核态等。

     二、解决方法

     总体上讲,我认为又两种方法,即基于模块与非模块的方法

     1.基于模块法:

      原理:我们知道linux系统使用一个称为进程控制块的数据结构task_stuct来代表一个进程。该结构包含进程的所有信息,包括子进程链表等信息。因此要打印进程信息和打印进程树,只要有进程task_struct结构数据就可解决了。

     思路:模块能够访问内核中的进程控制块:task_stuct,通过内核里的链表操作遍历内核进程树,按需求打印信息即可。首先获得当前进程的task_struct指针,在通过parents指针获得init进程的指针,再从init开始,通过内核链表操作完成打印任务。这里要求大家熟悉linux进程间的关系以及创建进程的过程,可参考实验书第二章进程控制。

 关于模块编程方法可见我的文章:http://qhwang.blogbus.com/logs/46878884.html

    2.用户态方法:

    原理:/proc目录下有一组以进程号pid为目录名的文件,每个目录包含了进程的具体信息。

    思路:通过/proc目录获得各进程的父进程ppid,获得进程树的父亲表示,再将进程树的父亲表示转换成左孩子与右孩子,最后中序遍历二叉树,输出进程信息即可。

 提示:可以利用scandir()函数来扫描/proc/目录

  由于文章长度限制,本文仅提供解决思路,如需具体实现源码(请说明用途),可Email我:victor0396@163.com

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值