当一个程序被加载到内存中运行,那么在内存中的那个数据就被称为进程(Process)。在 Linux 中:任何触发一个事件时,系统都会将它定义成一个进程,并且给予这个进程一个 ID,成为 PID。
同时依据触发这个进程的用户与相关属性关系,给予这个 PID 一组有效的权限设置。 
如何产生一个进程呢?
就是执行一个程序或者命令就可以触发一个事件而取得一个 PID 。
系统应该仅认识二进制文件的,
我们要让系统工作,就需要启动一个二进制文件,那个二进制文件就是程序(Program)。

程序一般放置在磁盘中,通过用户的执行触发。触发后会加载到内存中成为一个个体,那就是进程。
为了操作系统可管理这个进程,因此进程有给予执行者的权限/属性等参数,并包括进程所需要的脚步与数据或文件数据等,
最后再给予一个 PID。系统就是通过这个 PID 来判断该 process 是否具有权限进行工作的,它很重要。

当我们登录并执行bash 时,系统已经给我们一个 PID,这个 PID 是根据登录着的 User/Group(/etc/passwd)来的。
程序(Pramgam):通常为二进制程序放置在存储媒介中(如硬盘,光盘等),以物理文件的形式存在。进程(Process):程序被触发后,执行者的权限与属性、程序的代码与所需要数据等都会被加载到内存中,
操作系统并给予这个内存内的单元一个标识符(PID),可以说,进程就是一个正在运行的程序。

父进程与子进程

每个进程都有一个 PID ,那么父进程如何判断。就是通过 ParentPID(PPID)来判断即可。

有时候明明将有问题的进程杀死了,过段时间有出现。有可能是父进程没被杀死。

fork and exec : 过程调用的流程

Linux 的过程调用通常称为 fork and exec 的流程。进程都会通过父进程以复制(fork)的方式产生
一个一模一样的子进程,然后被复制出来的子进程再以 exec 的方式来执行实际进行的进程,
最终就称为一个子进程的存在。

系统先以 fork 的方式复制一个与父进程相同的暂存进程,这个进程与父进程的唯一的区别就是 PID 不同。
但是这个暂存进程还会多一个 PPID 的参数,PPID如前所述,就是父进程的进程标识符。
然后暂存进程以 exec 的方式加载实际要执行的程序,新的进程名为 qqq ,最终子进程的程序代码变为qqq了。

系统或网络服务: 常驻内存的进程

常驻在内存当中的进程通常都是负责一些系统所提供的功能以服务用户的各项任务,
因此常驻内存的进程就会被我们称为服务(daemon)。

Linux 的多用户,多任务

多用户: 每个人进入Linux的环境设置都可以随着每个人的喜好来设置(./bashrc)多任务:CPU切换进程的工作与这些工作进入到CPU运行的调度(CPU调度)会影响到系统的整体性能。多重登录环境的七个基本终端端口:在Linux中,默认提供了6个命令行登录窗口,以及一个图形界面。可以使用 alt + F1 ~ F7。bash 环境下的工作管理(job control): 我们登录 bash 后,在这个环境下执行的所有命令,都是 bash 的子进程。
单一的 bash 接口下,可以进行多个工作,如:
cp file1 file2 &
//重点在那个 & 功能,它表示将 file1 这个文件复制为 file2,且放置于后台中执行,
也就是说执行完这个命令之后,在这终端仍然可以做其他的工作。

工作管理

这个工作管理(job control)是在 bash 环境下的,也就是说:当我们登录系统取得 bash shell 之后,在单一终端下同时进行多个任务的行为管理。假设我们只有一个终端,可以出现提示符让你操作的环境就称为前台(foreground).
至于其他工作就可以让你放入后台(background)去暂停或者运行。注意,放入后台的工作想要运行时,它必须不能够与用户交互。
放入后台的工作是不能以ctrl+c终止的。总之,要进行bash 的 job control 必须要注意的限制是:- 这些工作所触发的进程必须来自你shell的子进程(只管理自己的shell)
 - 前台:你可以控制与执行命令的这个环境称为前台(foreground)的工作
 - 后台:可以自行运行的工作,你无法使用ctrl+c终止它,可使用bg/fg调用该工作
 - 后台中"执行"的进程不能等待 terminal/shell 的输入
bash 只能管理自己的工作而不能管理其他 bash 的工作,即使是root也不行。后台的工作状态可以分为 stop 和 running .
实际进行 job 控制的命令有哪些:- 直接将命令丢到后台中执行的 & :

在中括号中的那个号码为工作号码(job number),该号码与bash有关
后续的4212则是这个工作在系统中的 PID。至于后续出现的数据是 tar 执行的数据流。
由于我们没加上数据流重定向,所以会影响界面,不过不会影响前台操作。当我输入这个命令的时候,在该命令后面加上 & 代表该命令丢到后台中,此时
bash 会给予这个命令一个工作号码(job control) ,就是那个[1].至于后面那个4212就是该命令所触发的 PID 了。
我们可以继续操作 bash 。[1] + Done tar -czvf aa.tgz acl_test1
就代表[1]这个工作已经完成(Done),该工作的命令则是接在后面那一串命令行。
& 代表将工作丢到后台,不会被 ctrl+c 中断。//这样可以将输出信息都传到 /tmp/log.txt 中,不会影响前台工作
tar -czvf aa.tgz acl_test1 > /tmp/log.txt 2>&1 &


将目前的工作丢到后台中暂停: ctrl + z查看目前的后台工作状态: jobs
jobs [-lrs]-l:除了列出job number 与命令串之外,同时列出PID
    -r:仅列出正在后台run 的工作
    -s:仅列出正在后台中暂停的工作


注意 + - 号:+ 代表最近被放到后台的工作号码, - 代表最近最后第二个被放置到后台中的工作号码,
超过第三个以后的工作,就不会存在+/-号。将后台的工作拿到前台来处理: fg
fg %jobnumber%jobnumber : 为工作号码(数字),%可有可无fg //取出 + 号的 job
fg - // 取出 -

让工作在后台的状态变成运行中: bg

管理后台当中的工作: killkill -single %jobnumber
kill -l-l: 这个是 L 的小写,列出目前kill能够使用的信号(single)有哪些
    -1 : 重新读取一次参数配置(类似reload)
    -2 : 代表由键盘输入 ctrl-c同样的操作
    -9 :强制删除一个工作
    -15:以正常的程序方式终止意向工作,与-9不同

man 7 signal 查看帮助


vi 编辑,产生临时文件, -15 退出,并删除临时文件。
-9 退出,并不删除临时文件。
kill 后面默认接数字代表 PID,所以杀死job number 需要加 %

脱机管理文件

我们提到的后台,是指在终端机模式下可以避免 ctrl -c 中断的一个情景,并不是放到系统后台去。
所以,工作管理的后台依旧与终端机有关。如果我们以远程方式连接到主机,并且工作以 & 方式放到后台,我们脱机了。工作将断掉。nohup 可以让你在脱机或注销系统继续工作:
nohub [命令参数]       //前台工作
nohub [命令参数] & //后台工作nohup 不支持 bash 内置命令,其实 nohup 与终端机无关,因此信息被重定向到 ~/nohup.out

进程的查看

ps -aux // 查看系统所有的进程数据
ps -lA //查看系统所有的进程数据
ps -axjf // 连同进程树状态
参数:-A : 所有进程都显示出来,与 -e 具有相同的作用-a : 不与 terminal 有关的所有进程-u : 有效用户相关的进程x: 通常与 a 这个参数一起使用,列出较完整信息输出格式规划:-l: 较长,较详细的将 PID 信息列出来-j: 工作的格式-f : 做一个更为完整的输出

仅查看自己的 bash 相关进程 : ps -l

F :代表这个进程的标志(process flags),说明这个进程的权限,常见号码有:4:此进程权限为 root1:表示此子进程可以复制(fork)而无法实际执行(exec)S :代表这个进程的状态(STAT),主要状态有:R(running):该进程正在运行S(sleep):该进程目前正在睡眠状态(idle),但可以唤醒(signal)D:不可唤醒状态,通常这个进程可能在等待i/o的情况(ex>打印)T:停止状态(stop),可能是在工作控制(后台暂停)或除错(traced)状态Z:僵尸状态,进程已经终止但却无法被删除至内存外。UID/PID/PPID :代表此进程被该 UID所拥有/进程的 PID号码/此进程的父进程PID号码C:代表 CPU 使用率PRI/NI:Priority/Nice的缩写,代表此进程被 CPU 所执行的优先级,数值越小代表该进程越快被CPU执行。ADDR/SZ/WCHAN :都与内存有关,ADDR是 kernel function,指出该进程在内存的哪个部分,如果是running的进程,一般显示 '-'.SZ代表此内存用掉多少内存/WCHAN表示目前进程是否运行中,同样'-'表示运行中。TTY:登录者的终端机位置,若为远程登录则使用动态终端接口(pst/n)TIME:使用掉的 CPU时间,注意,是此进程实际花费CPU运行的时间,而不是系统时间CMD:就是command的缩写,造成此程序的触发进程的命令为何。

查看系统所有进程: ps aux

USER: 该进程属于哪个账号的PID:该进程的进程标识符%CPU:该进程用掉的 CPU 资源比%MEM:该进程所占用的物理内存百分比VSZ:该进程使用掉的虚拟内存量(KB)RSS:该进程占用的固定的内存量(KB)TTY:该进程是在哪个终端机上面运行的,若与终端机无关则显示? 另外,tty1-tty6 是本机上面的登陆者程序,若为 pts/0等,则表示由网络连接进主机的进程。STAT:该进程目前的状态,状态显示与 ps -l 的S 表示相同(R/S/T/Z);START:该进程被触发启动的时间TIME:该进程实际使用 CPU 运行的时间COMMAND : 该进程的实际命令一般来说,ps aux 会按照 PID 的顺序来显示。ps axjf
pstree


僵尸进程(zombie):通常造成僵尸进程的成因是因为该进程应该已经执行完毕,或者因故障而终止了。
但是该进程的父进程却无法完整将该进程结束掉,而造成那个进程一直存在内存中。
如果发现讴歌进程的 CMD 后面还接上<default>,就代表是僵尸进程。
通常僵尸进程都已经无法控管,
而是直接交给 init 这个程序来负责,偏偏init 是系统第一个执行的程序,它是所以进程的父进程。
我们无法直接杀掉(杀掉它,系统就死了)。如果产生僵尸进程,而系统经过一阵子还没法通过内核非经常性的特殊处理来讲该进程删除时,
只能通过 reboot。

top : 动态查看进程的变化

top [-d 数字] | top [-bnp]-d:后面可以接秒数,就是整个进程界面更新的秒数,默认5秒
    -b:以批次的方式执行top,还有更多的参数可以使用,通常搭配数据流重定向来将此批处理的结果输出为文件。
    -n:与 -b 搭配,意义是,需要进行几次top输出结果
    -p:指定某些个PID来进行查看检测而已

在 top 执行过程中可以使用的按键命令:?:显示在 top 当中可以输入的按键命令P:以 CPU 的使用资源排序显示M:以内存的使用资源排序显示N:以 PID 来排序T:由该进程使用的CPU时间积累排序k:给予某个PID一个信号量r:给予某个PID重新定制一个nice值q:离开top软件按键top -d 2 //每2秒刷新一次

不同于 ps 是静态的结果输出,top这个程序可以持续监测整个系统的进程工作情况。
top 主要分为2个界面,上面的界面为整个系统的资源使用情况。基本上总共有6行。
第一行(top..):这一行显示的信息分别为:目前的时间 ,10:54:11开机到目前为止所经过的时间 ,up 28 min已经登录系统的用户数,2 users系统在1,5,15分钟的平均工作负载,代表的是1,5,15分钟,系统平均要负责运行几个进程的意思。越小代表系统越闲置,若高于1得注意你的系统压力。第二行(Task..):显示的是目前进程的总量与个别进程在什么状态(running,sleeping,stopped,zombie)。比较需要注意的是最后zombie那个数值第三行(Cpus..):显示的是CPU的整体负载,每个选项可用?查阅。需要注意的是 %wa,那个选项代表的是 I/O wait,通常你的系统会变慢都是 I/O 产生的问题比较大。因此得注意这个选项消耗 CPU 的资源。另外,如果是多核设备,可以按下数字键 1 来切换不同的 CPU 负载率.第四行和第五行:表示目前的物理内存和虚拟内存(Mem/Swap)的使用情况。要注意 swap的使用量要尽量少,如果swap被大量使用,说明系统的物理内存实在不足。至于下半部分的界面:PIDUSERPR:priority 的缩写,进程的优先顺序,越小越早被执行Ni:nice 的缩写,与 Priority 有关,越小越早被执行%CPU:cpu使用率%MEM:内存使用率TIME+:CPU 使用时间的累加top 默认使用CPU使用率(%CPU)来作为排序,如果你想要使用内存使用率来排序,则按下M,若要恢复按下 P。
//将top的信息2次,然后将结果输出到 /tmp/top.txt
top -b -n 2 > /tmp/top.txt查看单一进程:echo $$ // 取得自己 bash 的 PID,使用top 持续查看
top -d 2 -p 2800

修改 Ni 的值:
按下 r 重新设置
pstree [-A|U] [-up]-A:各个进程树之间的连接以 ASCII字符来连接
    -U:各个进程树之间以utf-8码的字符来连接
    -p:同时列出每个进程的PID
    -u:同时列出每个进程的所属账号名称

pstree -A
pstree -Aup使用pstree 我们可以很清楚的知道所有的进程都依附在 init 这个进程下面。它的 PID 为 1.因为它是由 Linux 内核所主动调用的第一个进程。

28.程序管理(ps,top)相关推荐

  1. 进程管理ps,top

    1: ps命令显示目前内存中的进程: 参数: -A :所有的 process 均显示出来,与 -e 具有同样的效用: -a :不与 terminal 有关的所有 process : -u :有效使用者 ...

  2. Linux学习笔记_12_进程管理(ps, top)服务管理(service)查看系统网络(netstat)

    1. 进程的基本介绍 在 LINUX 中, 每个执行的程序(代码) 都称为一个进程. 每一个进程都分配一个 ID 号. 每一个进程, 都会对应一个父进程, 而这个父进程可以复制多个子进程. 例如 ww ...

  3. linux查看定时任务进程,[Linux]系统管理: 进程管理(ps/top/pstree/kill/pkill), 工作管理, 系统资源查看, 系统定时任务...

    进程管理:查看与终止 进程查看 1. 进程是正在执行的程序或命令. 2. 进程管理的作用: 判断服务器健康状态, 查看系统中所有进程 杀死进程 3. 查看系统中所有进程 ps aux    # 查看系 ...

  4. 进程管理:ps top nice

    什么是进程:进程是已启动的可执行程序的运行实例,进程有以下组成部分? 一个文件: 被配内存的地址空间: 有权限限制: 程序代码的一个或多个副本(也叫执行线程): 像人一样有状态: 静态查看进程ps: ...

  5. 鸟哥的Linux私房菜(基础篇)- 第十七章、程序管理与 SELinux 初探

    第十七章.程序管理与 SELinux初探 最近升级日期:2009/09/11 一个程序被加载到内存当中运行,那么在内存内的那个数据就被称为程序(process).程序是操作系统上非常重要的概念,所有系 ...

  6. CentOS学习笔记--程序管理

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

  7. 程序管理(PRI与NI、bash的工作管理、job control的管理、程序的管理)

    学习目标: Linux速成六. 学习内容: 1.程式与程序 2.观察程序的指令 3.程序的优先序 PRI 于 NI 4.bash 的工作管理 5.特殊权限 SUID/SGID/SBIT 的功能 6.j ...

  8. Linux之(16)程序管理

    Linux之(16)程序管理 Author:Onceday Date:2022年12月19日 漫漫长路,有人对你微笑过嘛- 文章目录 Linux之(16)程序管理 1.引言 2. 任务管理 job 2 ...

  9. Note For Linux By Jes(11)-程序管理与SELinux 初探

    什么是程序(Process): 子程序与父程序: fork and exec:程序呼叫的流程: 系统或网络服务:常驻在内存的程序 多重登陆环境的七个基本终端窗口:/etc/inittab 工作管理(j ...

  10. Linux入门进阶第四天(下)——程序管理(补充内容)

    1.PID 触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID,同时依据启发这个程序的使用者与相关属性关系,给予这个 PID 一组有效的权限设置. 同一个程序 ...

最新文章

  1. 【计算机网络】网络层 : 网络层简介 ( 功能 | 拥塞控制 )
  2. C#学习笔记——数据库篇(1)
  3. Fiddler的介绍和配置
  4. java邮箱找回密码_Spring实现简单的邮箱找回密码功能
  5. 【Python基础】在pandas中使用数据透视表
  6. python中的列表是指针吗_Python中的指针——到底指什么(二)
  7. 安装kali linux 2017.1 【二、安装VMware-tools 以及相关问题处理】
  8. 传苹果新iPhone显示屏4英寸 可视面积扩大30%
  9. STS安装 activiti-designer-5.18.0插件
  10. Python基础 - MySQLdb模块
  11. mysql5.7.23主主重制_MySQL5.7.23,主从复制的使用
  12. [基础]全局组、域本地组、通用组的区别与联系
  13. html标记详解博客,HTML表格标记详解8:表格嵌套
  14. 一个程序的自我修养「GitHub 热点速览 v.22.19」
  15. 安卓9安装xpose
  16. 智慧消防智能化管理系统综合分析
  17. 10000+TB 阿里网盘资源!够过年了吧?
  18. glob patterns
  19. matlab中inf是什么意思,simulink中inf什么意思
  20. IDEA炫酷的主题字体颜色设置

热门文章

  1. [2017浙工大之江学院决赛 H] qwb与学姐(并查集,按秩合并,最小生成树,LCA)...
  2. 【BZOJ1095】【ZJOI2007】捉迷藏 [动态点分治]
  3. 方维系统登陆弹窗,登陆后自动刷新当前页的实现方法
  4. 科创板开市暴涨,详解25家企业的“造富”能力
  5. 【BZOJ 1047】[HAOI2007]理想的正方形
  6. 机器学习(一):数据预处理
  7. 手把手教你开发chrome扩展
  8. C# decimal保留指定的小数位数,不四舍五入
  9. 微软欲对Silverlight进行部分开源(转载)
  10. WinForm自适应的相关代码