1 引言
进程是操做系统中的一个基本概念,是操做系统进行分配和资源管理的基本单位,从字面上能够理解能够认为进程就是“进行中的程序”,实际也确实是如此,由于进程本就是一个动态的概念,若是说程序是静止的,那么进程就是活动的、有生命的,是运行中的程序。
2 进程
为方便后续内容展开,先来介绍几个进程相关的概念。
(1)进程的状态
进程的整个生命周期包括5个状态:新建、就绪、阻塞、运行和终止,各状态的含义正如字面意思:
新建:程序正在被建立
就绪:程序正在等待CPU执行
阻塞:程序正在等待某一事件发生,而后才能运行
运行:程序已抢占到CPU资源,正在被执行
终止:程序运行结束。
其中的状态转换以下如所示。
(2)父进程与子进程
在程序执行过程当中,可能会产生多个进程,每个进程又能够建立新的进程,新建立的进程称为子进程,建立子进程的进程称为父进程。为区分不一样的进程,每个进程有一个PID属性,这是每个进程的惟一标示,此外每个进程还有一个PPID,指的是父进程的PID。
(3)僵尸进程与孤儿进程
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工做。
僵尸进程:一个进程使用fork建立子进程,若是子进程退出,而父进程并无调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
3 查看进程
查看进程有多种方法,经过ps命令是用的较多的一种方法。ps接受多种不一样风格形式的参数(UNIX风格,BSD风格),但功能上没有多大区别,故只须要掌握一种便可,为方便记忆理解,本文也只介绍UNIX风格的命令参数使用。
(1)查看全部进程
字段名
|
PID
|
TTY
|
TIME
|
CMD
|
字段含义
|
进程ID
|
启动进程的终端名
|
进程共占用CPU的时间
|
启动进程的命令
|
示例
|
1
|
?
|
00:00:06
|
systemd
|
字段名
|
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)指定字段进行查看
(3)指定进程信息中包含字符串查找进程
例如,查找全部进程中包含ssh字符串的进程:
(4)输出指定字段
只输出pid和ppid:
(5)输出指定进程ID的进程信息
- ps -p 5710 -o pid,ppid # 查看id为5710的进程信息
最后对经常使用字段及其含义作一个列表总结:
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来查看具体使用方法。