进程(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 的负载率。
第四、五行
表示目前的物理内存与虚拟内存 (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:查阅系统与核心相关信息
 
 
 uptime:观察系统启动时间与工作负载
 
 
是显示出目前系统已经开机多久的时间,以及 1, 5, 15 分钟的平均负载
 
 netstat :追踪网络或插槽文件
 
比较常被用在网络的监控方面,基本上, netstat 的输出分为两大部分,分别是网络与系统自己的进程相关性部分。
 
 dmesg :分析核心产生的讯息
 
所有核心侦测的讯息,不管是开机时候还是系统运作过程中,反正只要是核心产生的讯息,都会被记
录到内存中的某个保护区段。
 
 vmstat :侦测系统资源变化
 
 
区段
说明
进程字段 (procs)
r :等待运作中的进程数量;b:不可被唤醒的进程数量。这两个项目越多,代表系统越忙碌 (因为系统太忙,所以很多进程就无法被执行或一直在等待而无法被唤醒之故)。
内存字段 (memory)
swpd:虚拟内存被使用的容量; free:未被使用的内存容量; buff:用于缓冲存储器; cache:用于高速缓存。 这部份则与 free 是相同的。
内存置换空间 (swap)
si:由磁盘中将进程取出的量;so:由于内存不足而将没用到的进程写入到磁盘的 swap 的容量。如果 si/so 的数值太大,表示内存内的数据常常得在磁盘与主存储器之间传来传去,系统效能会很差!
磁盘读写 (io)
bi:由磁盘读入的区块数量; bo:写入到磁盘去的区块数量。如果这部份的值越高,代表系统的 I/O 非常忙碌!
系统 (system)
in:每秒被中断的进程次数; cs:每秒钟进行的事件切换次数;这两个数值越大,代表系统与接口设备的沟通非常频繁! 这些接口设备当然包括磁盘、网络卡、时间钟等。
CPU
us:非核心层的 CPU 使用状态; sy:核心层所使用的 CPU 状态; id:闲置的状态; wa:等待 I/O 所耗费的 CPU 状态; st:被虚拟机 (virtual machine) 所盗用的 CPU 使用状态 (2.6.11 以后才支持)。
 
 
 
 
 

进程管理与SELinux的更多相关文章

  1. 别人的Linux私房菜(17)进程管理与SELinux初探

    程序在磁盘中,通过用户的执行触发.触发事件时,加载到内存,系统将它定义成进程,给予进程PID,根据触发的用户和属性,给予PID合适的权限. PID和登陆者的UID/GID有关.父进程衍生出来的进程为子 ...

  2. 第十七章 程序管理与SELinux初探--进程、进程管理(ps、top)

    一个程序被加载到内存当中运行,在内存内的那个数据就被称为进程(process).进程是操作系统上非常重要的概念,所有系统上面跑的数据都会以进程的类型存在.系统进程有哪些状态?不同状态会如何影响系统的运 ...

  3. Linux 进程管理剖析--转

    地址:http://www.ibm.com/developerworks/cn/linux/l-linux-process-management/index.html Linux 是一种动态系统,能够 ...

  4. 第17章 程序管理与SELinux初探

    什么是进程 触发任何一个事件时,系统都会将它定义为一个进程,并且给予这个进程一个ID,称为PID,同时依据触发这个进程的用户与相关属性关系,给予这个进程一组有效的权限设置. 进程与程序 进程:执行一个 ...

  5. Linux进程管理(3):总结

    7. exit与_exit的差异    为了理解这两个系统调用的差异,先来讨论文件内存缓存区的问题. 在linux中,标准输入输出(I/O)函数都是作为文件来处理.对应于打开的每个文件,在内存中都有对 ...

  6. Linux操作系统的进程管理

    Linux操作系统的进程管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程相关概念 1>.进程概述 内核的功用: 进程管理.文件系统.网络功能.内存管理.驱动程序. ...

  7. 进程管理工具uptime,top,htop

    进程管理工具uptime,top,htop 一uptime 显示当前时间,系统已启动的时间.当前上线人数,系统平均负载(1.5.10分钟的平均负载,一般不会超过1) 系统平均负载:指在特定时间间隔内运 ...

  8. Linux进程管理之ps的使用

    主题Linux进程管理之ps工具的使用 一ps工具的介绍 ps: process state  进程状态ps - report a snapshot of the current processesL ...

  9. linux 进程管理和内存分配

    1.进程相关概念 进程:正在运行中的程序 内核功用:进程管理.文件系统.网络功能.内存管理.驱动程序.安全功能等 Process:运行中的程序的一个副本,是被载入内存的一个指令集合 进程 ID(Pro ...

随机推荐

  1. Vue CLI 3搭建vue+vuex 最全分析

    一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cli 全局安装的 npm 包,提供了终端里的vue命令(如:vue create .vue ...

  2. PHP中数字转为百分位,千分位,万分位。。。

    今天做项目中,需要将文章点击量显示在页面中,需求中给的是多少多少万,虽然不是什么难事,但做程序员这么久了,需要考虑的不再是简单的实现,而且有效率和快捷, 虽然PHP自带的函数有number_forma ...

  3. MAC系统 -java开发环境搭建

    MAC - java开发环境搭建 软件: jdk Intellij IDEA:java开发工具 maven:jar包管理 git :源码管理 sourceTree :源码管理GUI客户端 Studio ...

  4. Java面向对象编程 -1.5

    对象引用传递分析 类本身属于引用传递类型,既然是引用传递类型,那么就牵扯到内存的引用传递 所谓的引用传递的本质:同一块堆内存空间可以被不同的栈内存所指向,也可以更换指向. class Person{ ...

  5. Java IO流详解(三)——字节流InputStream和OutPutStream

    我们都知道在计算机中,无论是文本.图片.音频还是视频,所有的文件都是以二进制(字节)形式存在的,IO流中针对字节的输入输出提供了一系列的流,统称为字节流.字节流是程序中最常用的流.在JDK中,提供了两 ...

  6. 洛谷P1301 魔鬼之城 题解

    想找原题请点击这里:传送门 题目描述 在一个被分割为N*M个正方形房间的矩形魔鬼之城中,一个探险者必须遵循下列规则才能跳跃行动.他必须从(, )进入,从(N, M)走出:在每一房间的墙壁上都写了一个魔 ...

  7. Tomcat线程池及性能优化(重点)

    只需安装Tomcat [root@localhost ~]# vim /usr/local/tomcat8/conf/server.xml 修改处如下: <Connector port=&quo ...

  8. Flask - 底层原理和基本流程

    一. flask依赖wsgi,实现wsgi的模块:wsgiref(django),werkzeug(flask),uwsgi 1. werkzeug示例 from werkzeug.wrappers ...

  9. git 从创建到推送到远程,到拉取,实操

    https://www.liaoxuefeng.com/wiki/896043488029600/900003767775424 初始化 git init 添加所有文件到暂存区 git add . c ...

  10. 什么是Nib文件

    Nib文件是一种特殊类型的资源文件,它用于保存iPhone OS或Mac OS X应用程序的用户接口.Nib文件是Interface Builder文档.通常您会使用Interface Builder ...