文章目录
- 一、什么是进程process
- 1.进程与程序(process & program)
- (4)进程与程序小总结
- (5)子进程与父进程
- (6)系统或网络服务:常驻在内存的进程
- 2.Linux 的多人多任务环境
- 二、工作原理job control
- 三、进程管理
- 1.进程的观察
- (1)为什么进程管理这么重要呢?
- (2)将某个时间点的进程运作情况撷取下来:ps
- (a)仅观察自己的 bash 相关进程: ps -l
- (b)观察系统所有进程: ps aux
- (c)ps -lA
- (e)找出与 cron 与 rsyslog 这两个服务有关的 PID 号码
- (f)僵尸进程
- (3)动态观察进程的变化:top
- (B)每两秒钟更新一次 top:top -d 2
- (C) 将top 的结果输出成为文件
- (D) 自己的 bash PID 可由 $$ 变量取得,以及修改NI值
- (E) 找出最损耗的CPU资源
- (3)找到进程之间的相关性,找到父进程:pstree
- 2.进程的管理
- (1) 那么进程是如何互相管理的呢?signal
- (2)kill -signal PID:杀指令
- (3)killall -signal 指令名称:杀指令+某服务
- 3.关于进程的执行顺序
- (1)Priority与Nice值
- (2)PRI值由核心调整,只能修改NI值
- (a)nice :新执行的指令即给予新的 nice 值
- (b)renice :已存在进程的 nice 重新调整
- 4.系统资源的观察
- (1)free :观察内存使用情况
- (2)uname:查阅系统与核心相关信息
- (4)netstat :追踪网络或插槽文件
- (c)找出目前系统上已在监听的网络联机及其 PID:netstat -tulnp
- (5)dmesg :分析核心产生的讯息
- (6)vmstat :侦测系统资源变化
- 补:系统上面所有的磁盘的读写状态:vmstat -d
- 五、特殊文件与进程
- 六、总结
一、什么是进程process
1.进程与程序(process & program)
(1)一个程序被加载到内存当中运作,那么在内存内的那个数据就被称为进程(process)。
(2)在 Linux 系统当中:触发任何一个事件时,系统都会将他定义成为一个进程,并且给予这个进程一个 ID ,称为 PID,同时依据启发这个进程的用户与相关属性关系,给予这个PID 一组有效的权限设定。
(3)我们如何产生一个进程呢?
- 其实很简单啦,就是『执行一个程序或指令』就可以触发一个事件而取得一个 PID 啰!
- eg1:
- eg2:
(4)进程与程序小总结
(5)子进程与父进程
(a)用eg解释
- 咦!明明我将有问题的进程关闭了,怎么过一阵子他又自动的产生? 而且新产生的那个进程的 PID 与原先的还不一样,这是怎么回事呢?
- 所以你杀掉子进程后, 父进程就会主动再生一支!那怎么办?正所谓这:『擒贼先擒王』,找出那支父进程,然后将他删除就对啦!
- (b)fork and exec:进程呼叫的流程
- 在 Linux 的进程呼叫通常称为 fork-and-exec 的流程 !进程都会借由父进程以复制 (fork) 的方式产生一个一模一样的子进程, 然后被复制出来的子进程再以 exec 的方式来执行实际要进行的程序,最终就成为一个子进程的存在。
- eg
(6)系统或网络服务:常驻在内存的进程
- 常驻在内存当中的进程通常都是负责一些系统所提供的功能以服务用户各项任务,因此这些常驻程序就会被我们称为:服务 (daemon)。
- eg:系统本身所需要的服务:刚刚提到的 crond 及 atd ,rsyslogd 等,负责网络联机的服务:Apache, named, postfix, vsftpd… 等等的
- 补充;
2.Linux 的多人多任务环境
- 我们现在知道了,其实在 Linux 底下执行一个指令时,系统会将相关的权限、属性、程序代码与数据等均加载内存, 并给予这个单元一个进程标识符 (PID),最终该指令可以进行的任务则与这个 PID的权限有关。
- 多人环境: 在 Linux 系统上面具有多种不同的账号, 每种账号都有都有其特殊的权限,只有一个人具有至高无上的权力,那就是root (系统管理员)。因为每个人登入后取得的 shell 的 PID 不同。
- 多任务行为: 目前的 CPU 速度可高达几个 GHz。 这代表 CPU 每秒钟可以运作 109 这么多次指令。我们的 Linux 可以让 CPU 在各个工作间进行切换, 也就是说,其实每个工作都仅占去 CPU 的几个指令次数,所以 CPU 每秒就能够在各个进程之间进行切换啦!
- 多重登入环境的七个基本终端窗口: 在 Linux 当中,默认提供了六个文字界面登入窗口,以及一个图形界面,你可以使用 [Alt]+[F1]…[F7]来切换不同的终端机界面,而且每个终端机界面的登入者还可以不同人! 很炫吧!这个东西可就很有用啦!尤其是在某个进程死掉的时候!
- 特殊的进程管理行为:
- bash 环境下的工作管理 (job control)
1.进程的观察
(1)为什么进程管理这么重要呢?
(2)将某个时间点的进程运作情况撷取下来:ps
- 直接背两个比较不同的选项, 一个是只能查阅自己 bash 进程的『ps -l 』
- 一个则是可以查阅所有系统运作的进程『ps aux 』 !注意,你没看错,是『ps aux 』没有那个减号 (-)
(a)仅观察自己的 bash 相关进程: ps -l
- eg:bash 的程序属于 UID 为 0 的使用者,状态为睡眠 (sleep), 之所以为睡眠因为他触发了 ps (状态为 run) 之故。此进程的 PID 为 14836,优先执行顺序为 80 , 下达 bash 所取得的终端接口为 pts/0 ,运作状态为等待 (wait) 。
(b)观察系统所有进程: ps aux
- 在 ps aux 显示的项目中,各字段的意义为:
- eg:以 14836 那个 PID 那行来说明,该行的意义为『root 执行的 bash PID 为 14836,占用了 0.1% 的内存容量百分比,状态为休眠 (S),该进程启动的时间为 8 月 4 号,因此启动太久了, 所以没有列出实际的时间点。且取得的终端机环境为 pts/1 。
(c)ps -lA
(d)进程树:ps axjf
(e)找出与 cron 与 rsyslog 这两个服务有关的 PID 号码
(f)僵尸进程
(3)动态观察进程的变化:top
(A)top指令介绍
(B)每两秒钟更新一次 top:top -d 2
- 同于 ps 是静态的结果输出, top 这个程序可以持续的监测整个系统的进程工作状态。
- 在预设的情况下,每次更新进程资源的时间为 5 秒,不过,可以使用 -d来进行修改
(C) 将top 的结果输出成为文件
(D) 自己的 bash PID 可由 $$ 变量取得,以及修改NI值
(E) 找出最损耗的CPU资源
- top 预设使用 CPU 使用率 (%CPU) 作为排序的重点,如果你想要使用内存使用率排序,则可以按下『M』, 若要恢复,则按下『P』即可
- 一般来说,如果鸟哥想要找出最损耗CPU 资源的那个进程时,大多使用的就是 top 这支程序啦!然后强制以 CPU 使用资源来排序(在top 当中按下 P 即可)
(3)找到进程之间的相关性,找到父进程:pstree
说明如下:
2.进程的管理
(1) 那么进程是如何互相管理的呢?signal
- 其实是透过给予该进程一个讯号 (signal) 去告知该进程你想要让她作什么!
- 那么到底有多少 signal 呢? 主要的讯号代号与名称对应及内容是:
- 一般来说,你只要记得『1, 9,15』这三个号码的意义即可。
(2)kill -signal PID:杀指令
(3)killall -signal 指令名称:杀指令+某服务
- 要删除某个进程,我们可以使用 PID 或者是启动该进程的指令名称
- 如果要删除某个服务呢?呵呵!最简单的方法就是利用 killall ,他可以将系统当中所有以某个指令名称启动的进程全部删除。
3.关于进程的执行顺序
(1)Priority与Nice值
(2)PRI值由核心调整,只能修改NI值
(a)nice :新执行的指令即给予新的 nice 值
(b)renice :已存在进程的 nice 重新调整
4.系统资源的观察
(1)free :观察内存使用情况
(2)uname:查阅系统与核心相关信息
(3)uptime:观察系统启动时间与工作负载(top的最上面一层)
(4)netstat :追踪网络或插槽文件
- 基本上, netstat 的输出分为两大部分,分别是网络与系统自己的进程相关性部分:
(a)我们先来看看因特网联机情况的部分:
我们看上面仅有一条联机的数据,他的意义是:『透过 TCP 封包的联机,远程的172.16.220.234:48300联机到本地端的 172.16.15.100:ssh ,这条联机状态是建立 (ESTABLISHED) 的状态!』
(b)其实 Linux 系统上面的进程是可以接收不同进程所发送来的信息, 那就是Linux 上头的插槽档 (socket file)。
- socket file 可以沟通两个进程之间的信息,因此进程可以取得对方传送过来的资料。 由于有socket file,因此类似 X Window 这种需要透过网络连接的软件,目前新版的 distributions 就以 socket 来进行窗口接口的联机沟通了。
- socket file 的输出字段有:
- 以上表的输出为例,最后那三行在 /tmp/.xx 底下的数据,就是 X Window 窗口接口的相关进程啦!
(c)找出目前系统上已在监听的网络联机及其 PID:netstat -tulnp
(5)dmesg :分析核心产生的讯息
(6)vmstat :侦测系统资源变化
- 如果你想要了解一部繁忙的系统到底是哪个环节最累人, 可以使用 vmstat 分析看看。底下是常见的选项与参数说明:
- 你可以使用类似『vmstat 5 』代表每五秒钟更新一次,且无穷的更新!直到你按下 [ctrl]-c 为止。
- 一般来说,如果 I/O部分很忙碌的话,你的系统会变的非常慢!
补:系统上面所有的磁盘的读写状态:vmstat -d