Fork me on GitHub

Linux进程管理

1 引言

进程是操作系统中的一个基本概念,是操作系统进行分配和资源管理的基本单位,从字面上可以理解可以认为进程就是“进行中的程序”,实际也确实是如此,因为进程本就是一个动态的概念,如果说程序是静止的,那么进程就是活动的、有生命的,是运行中的程序。

2 进程

为方便后续内容展开,先来介绍几个进程相关的概念。
(1)进程的状态
进程的整个生命周期包括5个状态:新建、就绪、阻塞、运行和终止,各状态的含义正如字面意思:
新建:程序正在被创建
就绪:程序正在等待CPU执行
阻塞:程序正在等待某一事件发生,然后才能运行
运行:程序已抢占到CPU资源,正在被执行
终止:程序运行结束。
其中的状态转换如下如所示。
(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
 
(3)指定进程信息中包含字符串查找进程
例如,查找所有进程中包含ssh字符串的进程:
  • ps -ef |grep ssh
(4)输出指定字段
只输出pid和ppid:
  • ps -ef -o 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来查看具体使用方法。
 
posted @ 2019-05-21 20:21  奥辰  阅读(315)  评论(0编辑  收藏  举报