进程管理与SELinux

 
进程(process):
 
将程序与进程的总结:
 程序 (program):一般为 binary program ,放置在储存媒体中 (如硬盘、光盘、软盘、磁带等), 为实体文
件的型态存在;
进程 (process):程序被触发后,执行者的权限与属性、程序的程序代码与所需数据等都会被加载内存中, 操做系统并给予这个内存内的单元一个标识符 (PID),能够说,进程就是一个正在运做中的程序。
 
在 Linux 的进程呼叫一般称为 fork-and-exec 的流程!进程都会藉由父进程以复制 (fork) 的方式产生一个如出一辙的子进程(会多一个PPID), 而后被复制出来的子进程再以 exec 的方式来执行实际要进行的程序,最终就成为一个子进程的存在。
好比,登入 bash 以后, 就是取得一个名为 bash 的 PID ,而在这个环境底下所执行的其余指令,就几乎都是所谓的子进程。
 
常驻在内存当中的进程一般都是负责一些系统所提供的功能以服务用户各项任务,所以这些常驻程序就会被咱们称为:服务 (daemon)。好比,系统每分钟扫描 /etc/crontab 以及相关的配置文件,是由crond这个程序所提供的服务。通常 daemon 类型的程序都会加上 d 在文件名后头,d 表明的就是daemon 的意思。
 
在 Linux 当中,默认提供了六个文字界面登入窗口,以及一个图形界面,你可使用 [Alt]+[F1].....[F7]来切换不一样的终端机界面,并且每一个终端机界面的登入者还能够不一样人!
Linux能够在任什么时候候,将某个被困住的进程杀掉,而后再从新执行该进程而不用从新启动!几乎能够说绝对不会当机。
 

 
工做管理(job control):
 
要进行 bash 的 job control 必需要注意到的限制:
 这些工做所触发的进程必须来自于你 shell 的子进程(只管理本身的 bash);
 前景:你能够控制与下达指令的这个环境称为前景的工做 (foreground);
 背景:能够自行运做的工做,在终端机模式下你没法使用 [ctrl]+c 终止他,可以使用 bg/fg 呼叫该工做;
 工做管理的背景依旧与终端机有关。若是你想要让在背景的工做在你注销后还可以继续的执行,那么使用 nohup 搭配 & 是不错的运做情境。nohup必需要是外部指令才行。
 背景中『执行』的进程不能等待 terminal/shell 的输入(input)
 
进行 job 控制的指令:
 
 直接将指令丢到背景中『执行』的 &
 
    在背景当中执行的指令,若是有 stdout 及 stderr 时,他的数据依旧是输出到屏幕上面。可利用数据流重导向, 将输出数据传送至某个文件中。
 
 将『目前』的工做丢到背景中『暂停』:[ctrl]-z
 
在预设的状况下,使用 [ctrl]-z 丢到背景当中的工做都是『暂停』的状态。
 
 观察目前的背景工做状态: jobs
 
列出目前有多少的工做在背景当中。
bash 会给予这个指令一个『工做号码(job number)』,就是那个 [1]。后面 14566 则是该指令所触发的『 PID 』。
+ 表明最近被放到背景的工做号码, - 表明最近最后第二个被放置到背景中的工做号码。 而超过最后第三个之后的工做,就不会有 +/- 符号存在。
 
 将背景工做拿到前景来处理:fg(foreground)
 
 
或者 fg [+|-]
 
 让工做在背景下的状态变成运做中: bg
 
bg %jobnumber
 
 管理背景当中的工做: kill
 
kill 后面接的数字默认会是 PID ,若是想要管理 bash 的工做控制,就得要加上 %数字。
 

 
进程管理:
 
 进程的观察
 
利用静态的 ps或者是动态的 top,还能以 pstree 来查阅进程树之间的关系。
 
ps :将某个时间点的进程运做状况撷取下来
一个是只能查阅本身 bash 进程的『 ps -l 』,一个则是能够查阅全部系统运做的进程『 ps aux 』
 
o 仅观察本身的 bash 相关进程: ps -l
 
字段
说明
F
表明这个进程旗标 (process flags),说明这个进程的总结权限,常见号码有:
 若为 4 表示此进程的权限为 root ;
 若为 1 则表示此子进程仅进行复制(fork)而没有实际执行(exec)。
S
表明这个进程的状态 (STAT),主要的状态有:
 R (Running):该程序正在运做中;
 S (Sleep):该程序目前正在睡眠状态(idle),但能够被唤醒(signal)。
 D :不可被唤醒的睡眠状态,一般这支程序可能在等待 I/O 的状况(ex>打印)
 T :中止状态(stop),多是在工做控制(背景暂停)或除错 (traced) 状态;
 Z (Zombie):僵尸状态,进程已经终止但却没法被移除至内存外。
UID/PID/PPID
表明『此进程被该 UID 所拥有/进程的 PID 号码/此进程的父进程 PPID 号码』
C
表明 CPU 使用率,单位为百分比
PRI/NI
Priority/Nice 的缩写,表明此进程被 CPU 所执行的优先级,数值越小表明该进程越快被 CPU 执行。
ADDR/SZ/WCHAN
都与内存有关,
ADDR 是 kernel function,指出该进程在内存的哪一个部分,若是是个running 的进程,通常就会显示『 - 』。  
SZ 表明此进程用掉多少内存。  
WCHAN 表示目前进程是否运做中,一样的, 若为 - 表示正在运做中。
TTY
登入者的终端机位置,若为远程登陆则使用动态终端接口 (pts/n)
TIME
使用掉的 CPU 时间,注意,是此进程实际花费 CPU 运做的时间,而不是系统时间
CMD
形成此进程的触发程序之指令为什么
 
o 观察系统全部进程: ps aux
 
 
 
字段
说明
USER
该 process 属于那个使用者帐号的
PID
该 process 的进程标识符
%CPU
该 process 使用掉的 CPU 资源百分比
%MEM
该 process 所占用的物理内存百分比
VSZ
该 process 使用掉的虚拟内存量 (Kbytes)
RSS
该 process 占用的固定的内存量 (Kbytes)
TTY
该 process 是在那个终端机上面运做,若与终端机无关则显示 ?,另外, tty1-tty6 是本机上面的登入者进程,若为 pts/0 等等的,则表示为由网络链接进主机的进程。
STAT
该进程目前的状态,状态显示与 ps -l 的 S 旗标相同 (R/S/T/Z)
START
该 process 被触发启动的时间
TIME
该 process 实际使用 CPU 运做的时间
COMMAND
该进程的实际指令为什么
一般,形成 僵尸进程的成因是由于该进程应该已经执行完毕,或者是因故应该要终止了, 可是该进程的父进程却没法完整的将该进程结束掉,而形成那个进程一直存在内存当中。 若是你发如今某个进程的 CMD 后面还接<defunct> 时,就表明该进程是僵尸进程啦。
 
 
 top:动态观察进程的变化
 
在预设的状况下,每次更新进程资源的时间为 5 秒。
 
整个系统的资源使用状态,基本上总共有六行。
 
行数
解释
top...
o 目前的时间,亦便是 00:53:59 那个项目;
o 开机到目前为止所通过的时间,亦便是 up 6:07, 那个项目;
o 已经登入系统的用户人数,亦便是 3 users, 项目;
o 系统在 1, 5, 15 分钟的平均工做负载。表明的是 1, 5, 15 分钟,系统平均要负责运做几个进程(工做)的意思。 越小表明系统越闲置,若高于 1 得要注意你的系统进程是否太过繁复了!
Task...
显示的是目前进程的总量与个别进程在什么状态(running, sleeping, stopped, zombie)。 比较须要注意的是最后的 zombie 那个数值,若是不是 0 !好好看看究竟是那个 process 变成僵尸了
%Cpus...
显示的是 CPU 的总体负载,每一个项目可以使用 ? 查阅。须要特别注意的是 wa 项目,那个项目表明的是 I/O wait, 一般你的系统会变慢都是 I/O 产生的问题比较大!所以这里得要注意这个项目耗用 CPU 的资源喔! 另外,若是是多核心的设备,能够按下数字键『1』来切换成不一样 CPU 的负载率。
第4、五行
表示目前的物理内存与虚拟内存 (Mem/Swap) 的使用状况。 再次重申,要注意的是 swap的使用量要尽可能的少!若是 swap 被用的很大量,表示系统的物理内存实在不足!
第六行
是当在 top 程序当中输入指令时,显示状态的地方。
 
 
 pstree
 
 
由 pstree 的输出能够很清楚的知道,全部的进程都是依附在 systemd 这支进程底下的! 仔这支进程的 PID 是1号!由于他是由 Linux 核心所主动呼叫的第一支程序!
 

 
 进程的管理
 
进程是如何互相管理的呢?实际上是透过给予该进程一个讯号 (signal) 去告知该进程你想要让她做什么!
 
 
更多的讯号信息请自行 man 7 signal,只要记得『1, 9, 15』这三个号码的意义便可。
 
透过 kill 或 killall 传送一个讯号给某个进程。
 
 kill -signal PID
 
一般 kill 都会配合 ps, pstree 等指令。
若是将来你想要将某个莫名其妙的登入者的联机删除的话,就能够透过使用pstree -p 找到相关进程, 而后再以 kill -9 将该进程删除,该条联机就会被踢掉。
 
 killall -signal  指令名称
 
 
如,强制终止全部以 httpd 启动的进程 killall -9 httpd
 
总之,要删除某个进程,咱们可使用 PID 或者是启动该进程的指令名称, 而若是要删除某个服务呢?呵呵!最简单的方法就是利用 killall , 由于他能够将系统当中全部以某个指令名称启动的进程所有删除。
 
 

 
 进程的执行顺序
 
Linux 给予进程一个所谓的『优先执行序 (priority, PRI)』,这个 PRI 值越低表明越优先的意思。不过这个 PRI 值是由核心动态调整的,用户没法直接调整 PRI值的。
 
 
PRI 是核心动态调整的,用户也无权去干涉 PRI !若是想要调整进程的优先执行序时,得要透过 Nice 值!Nice 值就是上表的 NI !
 
PRI(new) = PRI(old) + nice
 
若是本来的 PRI 是 50 ,并非给予一个 nice = 5 ,就会让 PRI 变成 55! 由于 PRI 是系统『动态』决定的,因此,虽然 nice 值是能够影响 PRI ,不过, 最终的 PRI 还是要通过系统分析后才会决定的。
 
注意:
 nice 值可调整的范围为 -20 ~ 19 ;
 root 可随意调整本身或他人进程的 Nice 值,且范围为 -20 ~ 19 ;
 通常使用者仅可调整本身进程的 Nice 值,且范围仅为 0 ~ 19 (避免通常用户抢占系统资源);
 通常使用者仅可将 nice 值越调越高,例如原本 nice 为 5 ,则将来仅能调整到大于 5;
 
 
如何给予某个进程 nice 值?有两种方式,分别是:
 
 一开始执行程序就当即给予一个特定的 nice 值:用 nice 指令;
 
一般何时要将 nice 值调大呢?举例来讲,系统的背景工做中, 某些比较不重要的进程之进行:例如备份工做!因为备份工做至关的耗系统资源, 这个时候就能够将备份的指令之 nice 值调大一些,可使系统的资源分配的更为公平!
 
 调整某个已经存在的 PID 的 nice 值:用 renice 指令。
 
整个 nice 值是能够在父进程 --> 子进程之间传递的呢! 另外,除了 renice 以外,top 指令一样的也是能够调整 nice 值!
 
 

 
 系统资源的观察
 
top 能够看到不少系统的资源。
 
 free :观察内存使用状况
 
Mem 那一行显示的是物理内存的量, Swap 则是内存置换空间的量。 total 是总量, used 是已被使用的量, free 则是剩余可用的量。 后面的 shared/buffers/cached 则是在已被使用的量当中,用来做为缓冲及快取的量,这些 shared/buffers/cached 的用量中,在系统比较忙碌时,能够被释出而继续利用!所以后面就有一个 available (可用的) 数值!
 
Linux 系统为了要加速系统效能,因此会将最常使用到的或者是最近使用到的文件数据快取 (cache) 下来, 这样将来系统要使用该文件时,就直接由内存中搜寻取出,而不须要从新读取硬盘,速度上面固然就加快了! 所以,物理内存被用光是正常的!
 
 uname:查阅系统与核心相关信息
 
相关文章
相关标签/搜索