开网站供免费下载,婚纱摄影网页设计,吉林建设集团网站,危机舆情公关公司一个程序被加载到内存当中运作#xff0c;那么在内存内的那个数据就被称为进程(process)。 进程是操作系统上非常重要的概念#xff0c;所有系统上面跑的数据都会以进程的型态存在。
进程
在 Linux底下所有的指令与能够进行的动作都与权限有关#xff0c;而系统如何判定权…一个程序被加载到内存当中运作那么在内存内的那个数据就被称为进程(process)。 进程是操作系统上非常重要的概念所有系统上面跑的数据都会以进程的型态存在。
进程
在 Linux底下所有的指令与能够进行的动作都与权限有关而系统如何判定权限呢? 通过 UID/GID 以及文件的属性相关性进一步来解释在 Linux系统当中:【触发任何一个事件时系统都会将他定义成为一个进程并且给予这个进程一个ID称为PID同时依据启发这个进程的用户与相关属性关系给予这个PID一组有效的权限设定。】从此以后这个PID能够在系统上面进行的动作就与这个PID的权限有关了。
进程与程序
【执行一个程序或指令】就可以触发一个事件而取得一个 PID。 文件和目录的权限由三个部分组成所有者权限、同组用户权限和其他用户权限。每个部分又包括读、写、执行三种权限r/w/x。 【不同的使用者身份执行同一个 program 时系统给与的权限并不相同】 如上图所示程序一般是放置在实体磁盘中然后透过用户的执行来触发。触发后会加载到内存中成为一个个体那就是进程。为了操作系统可管理这个进程因此进程有给予执行者的权限/属性等参数并包括程序所需要的脚本与数据或文件数据等最后再给予一个PID。系统就是透过这个 PID来判断 process是否具有权限进行工作的。
当我们登入并执行 bash 时系统已经给我们一个 PID了这个 PID 就是依据登入者的UID/GID (/etc/passwd)来的。
程序(program) 通常为 binary program 放置在储存媒体中(如硬盘、光盘、软盘、磁带等)为实体文件的型态存在 进程(process) 程序被触发后执行者的权限与属性、程序的程序代码与所需数据等都会被加载内存中操作系统并给予这个内存内的单元一个标识符(PID)可以说进程就是一个正在运作中的程序。
子进程与父进程 当我们登入系统后会取得一个 bash 的 shell 然后用这个 bash 提供的接口去执行另一个指令例如 /usr/bin/passwd 或者是 touch 等等那些另外执行的指令也会被触发成为 PID 后来执行指令才产生的PID就是【子进程】而在原本的 bash 环境下就称为【父进程】。 程序彼此之间是有相关性的连续执行两个 bash 后第二个bash的父进程就是前一个bash。 因为每个进程都有一个PID那某个进程的父进程可以透过 Parent PID(PPID)来判断。
fork and exec进程呼叫的流程 子进程与父进程之间最大的复杂点在于进程互相之间的呼叫。 在 Linux 的进程呼叫通常称为 fork-and-exec 的流程进程都会由父进程以复制(fork)的方式产生一个一模一样的子进程然后被复制出来的子进程再以 exec 的方式来执行实际要进行的程序最终就成为一个子进程的存在。 (1)系统先以fork 的方式复制一个与父进程相同的暂存进程这个进程与父进程唯一的差别就是PID不同。但是这个暂存进程还会多一个 PPID 的参数PPID 就是父进程的进程标识符然后(2)暂存进程开始以exec 的方式加载实际要执行的程序最终子进程的程序代码就是实际要执行程序的ID。
系统或网络服务常驻在内存的进程 常驻在内存当中的进程通常都是负责一些系统所提供的功能以服务用户各项任务因此这些常驻程序就会被我们称为服务(daemon)。 系统的服务非常的多不过主要大致分成系统本身所需要的服务例如crond 及 atd 还有 rsyslogd 等等的。还有一些则是负责网络联机的服务例如Apache, named, postfix, vsftpd…等等的。这些网络服务在程序被执行后他会启动一个可以负责网络监听的端口口 (port)以提供外部客户端(client)的联机要求。
Linux 的多人多任务环境
在Linux底下执行一个指令时系统会将相关的权限、属性、程序代码与数据等均加载内存并给予这个单元一个进程标识符(PID)最终该指令可以进行的任务则与这个PID的权限有关。 Linux 也因此允许多用户且每个人都可以拥有自己的环境。
多人环境 在 Linux系统上面具有多种不同的账号每种账号都有都有其特殊的权限每个人进入Linux的环境设定都可以随着每个人的喜好来设定~./bashrc。root(系统管理员) 具有至高无上的权力。
多任务行为 Linux可以让 CPU 在各个工作间进行切换也就是说其实每个工作都仅占去 CPU 的几个指令次数所以 CPU 每秒就能够在各个进程之间进行切换。CPU 切换进程的工作与这些工作进入到 CPU 运作的排程(CPU排程非crontab排程)会影响到系统的整体效能。
多重登入环境的七个基本终端窗口 在 Linux当中默认提供了六个文字界面登入窗口以及一个图形界面可以使用 [Alt][F1].……[7] 来切换不同的终端机界面而且每个终端机界面的登入者还可以不同人。 其实这也是多任务环境下所产生的一个情况Linux 默认会启动六个终端机登入环境的程序所以就会有六个终端机接口。
特殊的进程管理行为 Linux几乎可以说绝对不会当机的。因为他可以在任何时候将某个被困住的进程杀掉然后再重新执行该进程而不用重新启动。 如果 在Linux 下以文字界面登入在屏幕当中显示错误讯息后就挂了动都不能动【可以随意的再按[Alf][F1.].….F7] 来切换到其他的终端机界面然后以 ps -aux 找出刚刚的错误进程然后给他kill一下】回到刚刚的终端机界面就又回复正常了。每个进程之间可能是独立的也可能有相依性只要到独立的进程当中删除有问题的那个进程当然他就可以被系统移除掉。
bash 环境下的工作管理job control 登入 bash之后就是取得一个名为 bash 的 PID了而在这个环境底下所执行的其他指令就几乎都是所谓的子进程了。在这个单一的 bash接口下可以进行多个工作
cp file1 file2 在这一串指令中重点在那个 的功能他表示将 file1 这个文件复制为 file2 且放置于背景中执行也就是说执行这一个命令之后在这一个终端接口仍然可以做其他的工作。而当这一个指令(cp file1 file2)执行完毕之后系统将会在终端接口显示完成的消息。
多人多任务的系统资源分配问题考虑 多人多任务有管理上的困扰因为使用者越来越多当使用者达到一定的人数后通常机器便需要升级了因为CPU的运算与 RAM的大小可能就会不敷使用。
工作管理
这个工作管理(job control)是用在 bash环境下的当登入系统取得 bash shell 之后在单一终端机接口下同时进行多个工作的行为管理。
什么是工作管理
进行工作管理的行为中其实每个工作都是目前 bash 的子进程亦即彼此之间是有相关性的。我们【无法以 job control 的方式由 tty1 的环境去管理 tty2 的 bash】。
由于假设我们只有一个终端接口因此【在可以出现提示字符让你操作的环境就称为前景(foreground)】至于【其他工作就可以让你放入背景(background)去暂停或运作】。 要注意的是放入背景的工作想要运作时他必须不能够与使用者互动。举例来说 vim绝对不可能在背景里面执行(running)的。因为你没有输入数据他就不会跑。而且【放入背景的工作是不可以使用 [ctrl]c 来终止的】。
要进行 bash 的 job control 必须要注意到的限制是 1.这些工作所触发的进程必须来自于 shell 的子进程(只管理自己的 bash) 2.前景可以控制与下达指令的这个环境称为前景的工作(foreground) 3.背景可以自行运作的工作无法使用[ctrl]c 终止他可使用bg/fg 呼叫该工作 4.背景中【执行】的进程不能等待 terminal/shell 的输入(input)。
job control 的管理
bash 只能够管理自己的工作而不能管理其他 bash 的工作所以即使是 root 也不能够将别人的 bash底下的 job 给他拿过来执行。
直接将指令丢到背景中【执行】的 在输入一个指令后在该指令的最后面加上一个【】代表将该指令丢到背景中此时 bash 会给予这个指令一个【工作号码(job number)】。 工作号码job number只与这个 bash环境有关但是他既然是个指令触发的东西所以当然一定是一个进程因此 job number 也会搭配一个 PID。 代表:【将工作丢到背景中去执行】不会被 [ctrl]c 中断。 将工作丢到背景当中要特别注意资料的流向否则可能出现的某些错误讯息会导致前景被影响。
将【目前】的工作丢到背景中【暂停】[ctrl]-z 如果正在使用vim 却发现有个文件不知道放在哪里需要到 bash 环境下进行搜寻此时不需要结束vim只要暂时将vim 给他丢到背景当中等待即可。
在 vim 的一般模式下按下[ctrl]及z这两个按键屏幕上会出现[1]表示这是第一个工作而那个代表最近一个被丢进背景的工作且目前在背景下预设会被取用的那个工作(与 fg 这个指令有关)。而那个Stopped 则代表目前这个工作的状态。在预设的情况下使用 [ctrl]-z 丢到背景当中的工作都是【暂停】的状态。
观察目前的背景工作状态jobs
jobs [-lrs]如果想要知道目前有多少的工作在背景当中一般来说直接下达 jobs即可。不过如果还想要知道该 job number 的 PID 号码可以加上 -l 这个参数。 在输出的信息当中代表预设的取用工作。所以说:【目前我有两个工作在背景当中两个工作都是暂停的而如果我仅输入 fg 时那么这个 [2] 会被拿到前景当中来处理】 其实代表最近被放到背景的工作号码–代表最近最后第二个被放置到背景中的工作号码。而超过最后第三个以后的工作就不会有/-符号存在了。
将背景工作拿到前景来处理fg fg(foreground) 可以将背景工作拿到前景来处理。
fg %jobnumber
# %jobnumberjobnumber 为工作号码数字% 是可由可无的fig - 代表将 - 号的那个工作号码拿出来。
让工作在背景下的状态变成运作中bg
bg %jobnumber[ctrl]-z 可以将目前的工作丢到背景底下去【暂停】bg 让一个工作在背景底下【Run】
管理背景当中的工作kill 将工作直接移除。
kill -signal %jobnumber
kill -l特别留意-9 这个 signal 通常是用在【强制删除一个不正常的工作】时所使用的-15 则是以正常步骤结束一项工作(15也是默认值)两者之间并不相同。-SIGTERM 与 -15 是一样的。 举例来说用vim 的时候会产生一个.filename.swp 的文件。那么当使用 -15 这个signal 时 vim 会尝试以正常的步骤来结束掉该vi的工作所以 .filename.swp 会主动的被移除但若是使用-9这个 signal 时由于该 vim 工作会被强制移除掉因此.filename.swp就会继续存在文件系统当中。
kill 后面接的数字默认会是 PID ,如果想要管理 bash 的工作控制就得要加上%数字了。
脱机管理问题
要注意的是在工作管理当中提到的【背景】指的是在终端机模式下可以避免 [crtl]-c 中断的一个情境可以说那个是 bash 的背景并不是放到系统的背景去所以工作管理的背景依旧与终端机有关。 在这样的情况下如果是以远程联机方式连接到 Linux 主机并且将工作以 的方式放到背景去在工作尚未结束的情况下脱机了该工作不会继续进行而是会被中断掉。
那怎么办?如果工作需要进行一大段时间又不能放置在背景底下那该如何处理? 首先可以参考at来处理即可因为 at 是将工作放置到系统背景而与终端机无关。如果不想要使用 at 的话也可以尝试使用 nohup 这个指令来处理这个 nohup 可以在脱机或注销系统后还能够让工作继续进行。
# 在终端机前景中工作
nohup [指令与参数]
# 在终端机背景中工作
nohup [指令与参数] 需要注意的是nohup 并不支持 bash 内建的指令必须要是外部指令才行 。
进程管理
进程的观察
ps将某个时间点的进程运作情况撷取下来
ps aux #观察系统所有的进程数据
ps -lA #也能观察所有系统的数据
ps axjf #连同部分进程树状态一个是只能查阅自己bash进程的【ps -l】一个则是可以查阅所有系统运作的进程【ps aux】。 注意【ps aux】没有那个减号(-)
仅观察自己的 bash 相关进程ps -l
F代表这个进程旗标(process flags)说明这个进程的总结权限常见号码有: 若为 4 表示此进程的权限为root 若为 1 则表示此子进程仅进行复制(fork)而没有实际执行(exec)。 S代表这个进程的状态(STAT)主要的状态有: R(Running)该程序正在运作中; S(Sleep)该程序目前正在睡眠状态(idle)但可以被唤醒(signal)。 D不可被唤醒的睡眠状态通常这支程序可能在等待IO 的情况(ex打印). T停止状态(stop)可能是在工作控制(背景暂停)或除错(traced)状态 Z(Zombie)僵尸状态进程已经终止但却无法被移除至内存外。 UID/PID/PPID代表【此进程被该UID所拥有/进程的PID号码/此进程的父进程 PID号码】 C代表 CPU使用率单位为百分比 PRI/NIPriority/Nice 的缩写代表此进程被CPU所执行的优先级数值越小代表该进程越快被CPU执行。 ADDR/SZ/WCHAN都与内存有关ADDR 是 kernel function指出该进程在内存的哪个部分如果是个 running 的进程一般就会显示【-】/SZ 代表此进程用掉多少内存/WCHAN表示目前进程是否运作中同样的若为 【–】 表示正在运作中。 TTY登入者的终端机位置若为远程登录则使用动态终端接口 (pts/n) TIME使用掉的CPU时间注意是此进程实际花费CPU运作的时间而不是系统时间 CMD就是 command 的缩写造成此进程的触发程序之指令为何。
观察系统所有线程ps aux USER该 process 属于哪个使用者账号 PID该 process 的进程标识符。 RCPU该 process 使用掉的 CPU 资源百分比 RMEM该 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该进程的实际指令为何。
其他观察方法
ps -lA
# 每个字段与 ps -l 相同但显示的进程包括系统所有的进程ps axjf
# 列出类似进程树的进程表示ps aux | egrep (cron|rsyslog)
# 找出与 cron 与 rsyslog 这连个服务有关的PID号码【僵尸(zombie)】成因是因为该进程应该已经执行完毕或者是因故应该要终止了但是该进程的父进程却无法完整的将该进程结束掉而造成那个进程一直存在内存当中。如果在某个进程的CMD后面还接上时就代表该进程是僵尸进程啦例如: 当系统不稳定的时候就容易造成所谓的僵尸进程可能是因为程序写的不好啦或者是使用者的操作习惯不良等等所造成。
事实上通常僵尸进程都已经无法控管而直接是交给 systemd 这支程序来负责了偏偏 systemd 是系统第一支执行的程序他是所有程序的父程序。我们无法杀掉该程序的(杀掉他系统就死掉了! )所以啰如果产生僵尸进程而系统过一阵子还没有办法透过核心非经常性的特殊处理来将该进程删除时那只好透过 reboot 的方式来将该进程抹去了。
top动态观察进程的变化 相对于 ps 是撷取一个时间点的进程状态top 则可以持续侦测进程运作的状态。
top [-d 数字] | top [-bnp]
# -d后面可以接秒数就是整个进程画面更新的秒数预设是5秒第一行(top…)这一行显示的信息分别为: 目前的时间亦即是15:55:40那个项目; 开机到目前为止所经过的时间亦即是 up 36min那个项目 已经登入系统的用户人数亦即是 2 users项目 系统在1,5,15分钟的平均工作负载。0.000.010.05 第二行(Tasks…)显示的是目前进程的总量与个别进程在什么状态(running, sleeping, stopped, zombie)。比较需要注意的是最后的 zombie 那个数值如果不是0就是那个 process变成僵尸了。 第三行(%Cpus…)显示的是CPU 的整体负载每个项目可使用 ? 查阅。需要特别注意的是 wa 项目那个项目代表的是 I/O wait通常系统会变慢都是 IO 产生的问题比较大。因此这里得要注意这个项目耗用CPU的资源。另外如果是多核心的设备可以按下数字键【1】来切换成不同CPU 的负载率。 第四行与第五行表示目前的物理内存与虚拟内存(Mem/Swap)的使用情况。要注意的是 swap 的使用量要尽量的少如果 swap被用的很大量表示系统的物理内存实在不足。 第六行这个是当在 top 程序当中输入指令时显示状态的地方。
PID每个process的ID USER该process所属的使用者 PRPriority 的简写进程的优先执行顺序越小越早被执行 NINice的简写与 Priority有关也是越小越早被执行 RCPUCPU的使用率 RMEM内存的使用率 TIMECPU使用时间的累加
top 预设使用CPU使用率(%CPU)作为排序的重点如果想要使用内存使用率排序则可以按下【M】若要回复则按下【P】即可。如果想要离开 top 则按下【q】。 如果想要将 top 的结果输出成为文件时可以这样做
top -b -n 2 /tmp/top.txt可以使用 top 观察特定PID的进程
如果需要修改其中的某个值按下 【R】 可以修改。。。
pstree pstree 可以找进程之间的相关性。
pstree [-AIU] [-up]直接输入 pstree可以查到进程相关性还会使用线段将相关性进程连结起来。一般链接符号可以使用ASCII 码即可但有时因为语系问题会主动的以 Unicode 的符号来链接但因为可能终端机无法支持该编码或许会造成乱码问题。因此可以加上 -A 选项来克服此类线段乱码问题。 由 pstree 的输出也可以很清楚的知道所有的进程都是依附在 systemd 这支进程底下的。 仔细看一下这支进程的 PID 是 一号因为他是由Linux核心所主动呼叫的第一支程序所以PID就是一号了。 为啥发生僵尸进程需要重新启动因为 systemd 要重新启动而重新启动 systemd 就是 reboot。
进程的管理
进程之间是可以互相控制的。 进程互相管理是透过给予该进程一个讯号(signal)去告知该进程你想要让她作什么。 使用kill -l(小写的L)或者是 man 7 signal 都可以查询到有多少讯号 主要的讯号代号与名称对应及内容是: kill -signal PID kill 将这个signal传送给某个工作(%jobnumber)或者是某个PID(直接输入数字)。 要再次强调的是: kill后面直接加数字与加上%number 的情况是不同的。因为工作控制中有 1 号工作但是 PID1号则是专指【 systemd 】这支程序。 因此那个%是专门用在工作控制的。
killall -signal 指令名称 由于kill后面必须要加上PID(或者是 job number)所以通常kill 都会配合ps, pstree等指令因为我们必须要找到相对应的那个进程的ID.但是如此一来很麻烦killall 可以利用【下达指令的名称】来给予讯号的。
killall [-iIe] [command name] killall 可以将系统当中所有以某个指令名称启动的进程全部删除。
关于进程的执行顺序
Linux是多人多任务的环境由t op 的输出结果我们也发现系统同时间有非常多的进程在运行中只是绝大部分的进程都在休眠(sleeping)状态而已。 如果所有的进程同时被唤醒那么、就得要考虑到进程的优先执行序(Priority) 与CPU排程了。
CPU 排程与例行性工作排程并不一样。 CPU排程指的是每支进程被 CPU 运作的演算规则而例行性工作排程则是将某支程序安排在某个时间再交由系统执行。CPU排程与操作系统较具有相关性。
Priority 与 Nice 值 CPU 一秒钟可以运作多达数 G 的微指令次数透过核心的 CPU 排程可以让各进程被 CPU 所切换运作因此每个进程在一秒钟内或多或少都会被CPU执行部分的脚本。
不具有优先级的进程按照顺序来 具有优先级的进程优先级较高的则运作次数可以较多次不需要与较低优先级的进程抢位置 这个 PRI 值越低代表越优先的意思。不过这个 PRI 值是由核心动态调整的用户无法直接调整 PRI 值的。 由于PRI是核心动态调整的用户无权去干涉 PRI。如果想要调整进程的优先执行序时就得要透过Nice值了。 Nice 值就是上状态栏中的 NI 。一般来说PRI 与NI的相关性如下 PRI(new) PRI(old) nice 因为PRI是系统【动态】决定的所以虽然 nice 值是可以影响PRI不过最终的 PRI 仍是要经过系统分析后才会决定的。另外nice 值是有正负的而既然 PRI越小越早被执行所以当 nice 值为负值时那么该进程就会降低 PRI 值亦即会变的较优先被处理。 nice值可调整的范围为 -20~19 root可随意调整自己或他人进程的 Nice 值且范围为-20 ~19 一般使用者仅可调整自己进程的 Nice 值且范围仅为0~19(避免一般用户抢占系统资源) 一般使用者仅可将 nice 值越调越高例如本来 nice 为 5则未来仅能调整到大于5; 这也就是说要调整某个进程的优先执行序就是【调整该进程的 nice值】了。
给予某个进程 nice 值有两种方式分别是: 1.一开始执行程序就立即给予一个特定的 nice 值用nice指令 2.调整某个已经存在的 PID 的 nice 值用 renice 指令。
nice新执行的指令即给予新的 nice 值
nice [-n 数字] command
# -n后面接一个数值数值的范围是 -20~19将nice值调大的情况系统的背景工作中某些比较不重要的进程之进行例如备份工作由于备份工作相当的耗系统资源这个时候就可以将备份的指令之 nice 值调大一些可以使系统的资源分配的更为公平。
renice已存在进程的 nice 重新调制
renice [number] PID
# PID : 某个进程的 ID需要以ps或其它进程观察的指令去找出PID系统资源的观察
free观察内存使用情况
free [-b|-k|-m|-g|-h] [-t] [-s N -c N]Mem 那一行显示的是物理内存的量Swap 则是内存置换空间的量。total 是总量used 是已被使用的量free 则是剩余可用的量。后面的 shared/buffers/cached 则是在已被使用的量当中用来作为缓冲及快取的量这些 shared/ buffers/cached 的用量中在系统比较忙碌时可以被释出而继续利用。因此后面就有一个 available可用的数值。
一般来说 swap 最好不要被使用尤其 swap 最好不要被使用超过 20% 以上如果发现 swap 的用量超过20%。那么最好还是买物理内存来插吧因为Swap的效能跟物理内存实在差很多而系统会使用到 swap绝对是因为物理内存不足了才会这样做的。
uname查阅系统与核心相关信息
uname [-asrmpi]uname 可以列出目前系统的核心版本、主要硬件平台以及CPU类型等等的信息。
uptime观察系统启动时间与工作负载 uptime 可以显示 top 画面的最上面一行。
netstat追踪网络或插槽文件 netstat 的输出分为两大部分分别是网络与系统自己的进程相关性部分
netstat -[atunlp]Proto网络的封包协议主要分为 TCP与 UDP 封包 Recv-Q非由用户程序链接到此 socket 的复制的总 bytes 数 Send-Q非由远程主机传送过来的 acknowledged 总 bytes 数 Local Address本地端的 IP:port 情况 Foreign Address远程主机的 IP:port 情况 State联机状态主要有建立(ESTABLISED)及监听(LISTEN);
socket file 的输出字段有 Proto一般就是unix RefCnt连接到此 socket 的进程数量Flags联机的旗标 Typesocket 存取的类型。主要有确认联机的 STREAM 与不需确认的 DGRAM 两种 State若为 CONNECTED 表示多个进程之间已经联机建立。 Path连接到此socket的相关程序的路径!或者是相关数据输出的路径。
dmesg分析核心产生的讯息 系统在开机的时候核心会去侦测系统的硬件某些硬件到底有没有被捉到就与这个时候的侦测有关。 所有核心侦测的讯息不管是开机时候还是系统运作过程中反正只要是核心产生的讯息都会被记录到内存中的某个保护区段。dmesg 这个指令就能够将该区段的讯息读出来的!因为讯息实在太多了所以执行时可以加入这个管线指令【more】来使画面暂停。 vmstat侦测系统资源变化 vmstat 可以侦测【CPU/内存/磁盘输入输出状态】等等。
vmstat [-a] [延迟 [总计侦测次数]] # CPU/内存等信息
vmstat [-fs] # 内存相关
vmstat [-S 单位] # 设定显示数据的单位
vmstat [-d] # 与磁盘有关
vmstat [-p 分区槽] # 与磁盘有关统计目前主机CPU状态每秒一次共计三次 进程字段(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 以后才支持)。
系统上所有的磁盘的读写状态
特殊文件与进程
具有 SUID/SGID 权限的指令执行状态
SUID 的权限其实与进程的相关性非常的大 SUID 的程序是如何被一般用户执行且具有什么特色呢? -SUID权限仅对二进制程序(binary program)有效 -执行者对于该程序需要具有 x 的可执行权限 -本权限仅在执行该程序的过程中有效(run-time) -执行者将具有该程序拥有者(owner)的权限。
所以说整个SUID的权限会生效是由于【具有该权限的程序被触发】而一个程序被触发会变成进程所以执行者可以具有程序拥有者的权限就是在该程序变成进程的那个时候。 执行了passwd 后就具有root 的权限因为在触发 passwd后会取得一个新的进程与 PID该 PID 产生时透过 SUID 来给予该 PID 特殊的权限设定。 SUID程序运作过程中产生进程.
/proc/* 代表的意义
所谓的进程都是在内存当中而内存当中的数据又都是写入到 /proc/* 这个目录下的所以可以直接观察/proc 这个目录当中的文件。 基本上目前主机上面的各个进程的 PID 都是以目录的型态存在于 /proc 当中。
cmdline这个进程被启动的指令串就是这个指令、选项与参数启动systemd environ这个进程的环境变量内容。
查询已开启文件或已执行进程开启的文件
fuser由文件(或文件系统)找出正在使用该文件的进程 可以利用 fuser 来观察进程到底在这次启动过程中开启了多少文件。
fuser [-umv] [-k [i]] [-signal]] file/dir找出目前所在目录的使用 PID/所属账号/权限 ACCESS权限代表的意义 c此进程在当前的目录下(非次目录) e可被触发为执行状态 f是一个被开启的文件 r代表顶层目录 root di rectory) F该文件被开启了不过在等待回应中 m可能为分享的动态函式库
透过这个 fuser 可以找出使用该文件、目录的进程它的重点与 ps, pstree不同。fuser 可以让我们了解到某个文件(或文件系统)目前正在被哪些进程所利用。
lsof列出被进程所开启的文件档名 相对于 fuser 是由文件或者装置去找出使用该文件或装置的进程反过来说lsof 可以查出某个进程开启或者使用的文件与装置。
lsof [-aUu] [d]在预设的情况下lsof会将目前系统上面已经开启的。 文件第一个文件 systemd 执行的地方就在根目录而根目录所在的 inode 也有显示出来。
pidof找出某支正在执行的程序的 PID
pidof [-sx] program_name《鸟哥的Linux私房菜-基础篇》学习笔记
《鸟哥的Linux私房菜-基础篇》学习笔记