Linux进程管理
1 引言
进程是操作系统中的一个基本概念,是操作系统进行分配和资源管理的基本单位,从字面上可以理解可以认为进程就是“进行中的程序”,实际也确实是如此,因为进程本就是一个动态的概念,如果说程序是静止的,那么进程就是活动的、有生命的,是运行中的程序。
2 进程
为方便后续内容展开,先来介绍几个进程相关的概念。
(1)进程的状态
进程的整个生命周期包括5个状态:新建、就绪、阻塞、运行和终止,各状态的含义正如字面意思:
新建:程序正在被创建
就绪:程序正在等待CPU执行
阻塞:程序正在等待某一事件发生,然后才能运行
运行:程序已抢占到CPU资源,正在被执行
终止:程序运行结束。
其中的状态转换如下如所示。
![](https://img2018.cnblogs.com/blog/1539768/201905/1539768-20190521201648107-1423702803.png)
(2)父进程与子进程
在程序执行过程中,可能会产生多个进程,每一个进程又可以创建新的进程,新创建的进程称为子进程,创建子进程的进程称为父进程。为区分不同的进程,每一个进程有一个PID属性,这是每一个进程的唯一标示,此外每一个进程还有一个PPID,指的是父进程的PID。
(3)僵尸进程与孤儿进程
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
3 查看进程
查看进程有多种方法,通过ps命令是用的较多的一种方法。ps接受多种不同风格形式的参数(UNIX风格,BSD风格),但功能上没有多大区别,故只需要掌握一种即可,为方便记忆理解,本文也只介绍UNIX风格的命令参数使用。
(1)查看所有进程
- ps -e
- ps -ef
另外还有ps -a 用于显示当前终端的所有进程,ps -A与ps-e显示信息完全一样。
(2)指定字段进行查看
- ps -eo pid,ppid,cmd
![](https://img2018.cnblogs.com/blog/1539768/201905/1539768-20190521201739479-1332409036.png)
(3)指定进程信息中包含字符串查找进程
例如,查找所有进程中包含ssh字符串的进程:
- ps -ef |grep ssh
![](https://img2018.cnblogs.com/blog/1539768/201905/1539768-20190521201840783-1333942804.png)
(4)输出指定字段
只输出pid和ppid:
- ps -ef -o pid,ppid
![](https://img2018.cnblogs.com/blog/1539768/201905/1539768-20190521201926432-106140089.png)
(5)输出指定进程ID的进程信息
- ps -p 5710 -o pid,ppid # 查看id为5710的进程信息
![](https://img2018.cnblogs.com/blog/1539768/201905/1539768-20190521202000529-1007637620.png)
最后对常用字段及其含义做一个列表总结:
更多内容不再介绍,事实上,更多详细信息可以通过man ps来查看具体使用方法。
![](https://files.cnblogs.com/files/chenhuabin/wechat.gif)
作者:奥辰
微信号:chb1137796095
Github:https://github.com/ChenHuabin321
欢迎加V交流,共同学习,共同进步!
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。