1 引言
进程是操作系统中的一个基本概念,是操作系统进行分配和资源管理的基本单位,从字面上可以理解可以认为进程就是“进行中的程序”,实际也确实是如此,因为进程本就是一个动态的概念,如果说程序是静止的,那么进程就是活动的、有生命的,是运行中的程序。
2 进程
为方便后续内容展开,先来介绍几个进程相关的概念。
(1)进程的状态
进程的整个生命周期包括5个状态:新建、就绪、阻塞、运行和终止,各状态的含义正如字面意思:
新建:程序正在被创建
就绪:程序正在等待CPU执行
阻塞:程序正在等待某一事件发生,然后才能运行
运行:程序已抢占到CPU资源,正在被执行
终止:程序运行结束。
其中的状态转换如下如所示。
![](https://i-blog.csdnimg.cn/blog_migrate/c9c2a5054a6867d9641f6b3329bd17fd.png)
(2)父进程与子进程
在程序执行过程中,可能会产生多个进程,每一个进程又可以创建新的进程,新创建的进程称为子进程,创建子进程的进程称为父进程。为区分不同的进程,每一个进程有一个PID属性,这是每一个进程的唯一标示,此外每一个进程还有一个PPID,指的是父进程的PID。
(3)僵尸进程与孤儿进程
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
3 查看进程
查看进程有多种方法,通过ps命令是用的较多的一种方法。ps接受多种不同风格形式的参数(UNIX风格,BSD风格),但功能上没有多大区别,故只需要掌握一种即可,为方便记忆理解,本文也只介绍UNIX风格的命令参数使用。
(1)查看所有进程
- ps -e
字段名
|
PID
|
TTY
|
TIME
|
CMD
|
字段含义
|
进程ID
|
启动进程的终端名
|
进程共占用CPU的时间
|
启动进程的命令
|
示例
|
1
|
?
|
00:00:06
|
systemd
|
- ps -ef
字段名
|
UID
|
PID
|
PPID
|
C
|
STIME
|
TTY
|
TIME
|
CMD
|
字段含义
|
进程用户ID
|
进程ID
|
父进程ID
|
CPU调度情况
|
进程启动的时间
|
启动进程的终端名
|
进程共占用CPU的时间
|
启动进程的命令
|
示例
|
root
|
1
|
0
|
0
|
07:36
|
?
|
00:00:06
|
/sbin/init
|
另外还有ps -a 用于显示当前终端的所有进程,ps -A与ps-e显示信息完全一样。
(2)指定字段进行查看
- ps -eo pid,ppid,cmd
![](https://i-blog.csdnimg.cn/blog_migrate/fc2bfd5c0bf7de2bb128b9ed21a89c29.png)
(3)指定进程信息中包含字符串查找进程
例如,查找所有进程中包含ssh字符串的进程:
- ps -ef |grep ssh
![](https://i-blog.csdnimg.cn/blog_migrate/e1573f440b5e84d06b12cc9bab070567.png)
(4)输出指定字段
只输出pid和ppid:
- ps -ef -o pid,ppid
![](https://i-blog.csdnimg.cn/blog_migrate/d62ec2e471a222d75dba649b42dce5c7.png)
(5)输出指定进程ID的进程信息
- ps -p 5710 -o pid,ppid # 查看id为5710的进程信息
![](https://i-blog.csdnimg.cn/blog_migrate/1a55a207f734eca649f1b885da6676a1.png)
最后对常用字段及其含义做一个列表总结:
cmd
|
启动进程的命令
|
pcpu
|
CPU利用率
|
flags
|
长格式F字段中的标志
|
pgrp
|
进程组ID
|
tpgid
|
控制TTY进程组ID
|
cutime
|
累计用户时间
|
cstime
|
累计系统时间
|
utime
|
用户时间
|
min_flt
|
次要页面错误数
|
maj_flt
|
主要页面错误数
|
cmin_flt
|
累积次要页错误
|
cmaj_flt
|
累积主要页面错误
|
session
|
会话ID
|
pid
|
进程ID
|
ppid
|
父进程ID
|
rss
|
常驻集大小
|
resident
|
常驻页面
|
size
|
内存大小(以千字节为单位)
|
share
|
共享页数
|
tty
|
控制TTY的终端号
|
start_time
|
启动进程的时间
|
uid
|
用户ID
|
user
|
用户名
|
vsize
|
总虚拟机大小(kib)
|
priority
|
内核调度优先级
|
更多内容不再介绍,事实上,更多详细信息可以通过man ps来查看具体使用方法。