进程管理

拟墨画扇 提交于 2020-01-30 13:34:13

一.什么是进程(process)

1)进程与程序

触发任何一个事件时,系统都会将它定义为一个进程,并且给这个进程一个ID,称为PID。

程序:一般是放置在物理磁盘或其他存储媒介中(以物理文件的形式存在),然后通过用户的执行来触发。触发后加载到内存中成为一个个体,就是进程。(内存中的数据都是写入到/proc/*这个目录下)

进程:程序被触发后,执行者的权限与属性、程序的代码与所需数据等都会被加载到内存中,操作系统给予这个内存中的单元一个标识符(PID),可以说进程是一个正在运行中的程序。

之前说过的衍生出来的进程,在bash环境下执行命令而触发的进程为子进程,原bash的进程为父进程,父进程的ID为PPID(Parent PID)

fork and exec:程序调用的流程

进程都会借由父进程以复制(fork)的方式产生一个一模一样的子进程,然后被复制出来的子进程再以exec的方式来执行实际要执行的进程。

这里产生的临时进程的程序名为zzz,其PPID和PID都与实际的子进程的PPID和PID相同。

系统或网络服务

常驻在内存中的进程被称为服务(daemon)。

例如计划任务的命令为cron与at,它们的服务名称为crond与atd。

一般daemon类型的进程都会在文件名后加d来简便地判断该进程是否为daemon。

2)Linux多人多任务环境

不同的bash登录有不同的PID

默认提供7个基本终端界面,6个命令行登录界面和一个图像界面

在Ubuntu中使用ctrl+alt+F1~F7来切换不同的登录界面。

当某个进程死掉,终端卡死的时候,可以切换到另一个登录界面,将刚刚卡死的进程kill掉。从而使计算机恢复正常而不用重新启动。

bash环境下的任务管理,可以使用&符号,将命令放在后台执行

二.任务管理(job control)

就是指当我们登录系统获取到bash shell之后,在单一终端下同时执行多个任务的操作管理。

1)什么是任务管理

执行任务管理的时候,每个任务都是当前bash的子进程,彼此之间有相关性,无法使用任务管理的方式由tty1的环境去管理tty2的bash。

/etc/secrutiy/limits.conf里面可以设置用户同时登录的连接数,因此某些用户可能只能启动一个连接来进行工作,所以学习任务管理是必要的。

可以出现提示字符让你操作的环境称为前台(foreground);其他任务放入后台(background)运行或者暂停,后台的任务必须不能够与用户进行交互。放入后台的任务是不可以使用ctrl+c来终止的。

2)job control的管理

在后台里面的任务状态可以分为暂停stop和运行running。

将命令放在后台执行的&

在命令的最后加&符号,可以将命令放在后台执行。同时会给予该命令一个任务号码(job number)

这里还用到了数据流重定向,将正确信息和错误信息发送到/tmp/log.txt

将目前的任务丢到后台中暂停:ctrl+z

在暂停的时候一样会显示出任务号码

jobs查看目前的后台任务状态:jobs

jobs -lrs

-l:除了列出job number与命令串之外,同时列出PID的号码。

-r:仅列出在后台run的任务

-s:仅列出在后台stop的任务

同时暂停两个任务,在任务号码旁边显示+号的表示时最近被放到后台的任务,-表示是最近第二个被放到后台的任务号码。

将后台任务拿到前台来处理:fg

fg %jobnumber

这里的%可有可无

这里指定拿任务号码的任务到前台;若没有指定任务号码,则默认拿+的号码。

让任务在后台下的状态变成运行中:bg

bg %jobnumber

管理后台的任务:kill

kill -l  显示目前kill能够使用的信号

kill -signal %jobnumber

这里的不同siganl代表对某个任务不同的操作

-signal:-1表示重新读取一次参数的配置文件  -SIGHUP;-2表示由键盘输入ctrl+c同样的操作;-9表示强制删除一个任务 -SIGKILL;-15表示以正常的方式终止任务与-9时不同的 -SIGTERM;

需要注意使用kill对vi任务进行删除的时候,若使用-9会产生一个.filename.swp的文件,若使用-15结束任务,则不会有该文件产生。

3)脱机管理问题

任务管理的后台依旧与终端有关。但是at的任务放置到后台与终端无关。

使用nohup命令进行处理,可以在脱机或注销系统后让任务继续执行。

nohup 命令与参数

nohup 命令与参数 &

nohup不支持bash内置的命令,命令必须是外部的命令。

三.进程管理

1)查看进程

ps:将某个时间结点的进程运行情况显示出来

-A:所有进程都显示出来,与-e效果相同。

-a:不显示与终端有关的所有进程

-u:有效使用者的相关进程

输出格式规划:

-l:较长、较详细的将PID的信息列出

-j:任务的格式

-f:做一个更为完整的输出

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

ps aux查看系统的所有进程

top:动态查看进程的变换

top [-d 数字] -bnp

-d:后面加秒数,就是整个进程界面更新的秒数,默认5秒

-b:以批量的方式执行top,通常会搭配数据流重定向来将结果输出为文件

-n:与-b搭配,意义是,需要执行几次top的输出结果

-p:指定某些个PID来执行查看监测。

top执行过程中,在top界面可以使用的按键命令:

?:显示在top中可以输入的按键命令

P:以CPU的使用排序显示

M:以Memory的使用排序显示

N:以PID来排序

T:由该进程使用的CPU时间累积排序

k:给予某一个PID一个信号

r:给予某个PID重新编制一个nice值

q:退出top按键

#每2秒刷新一次,将两次结果输出到/tmp/top.txt中
top -d 2 -b -n 2 > /tmp/top.txt  
#查看bash PID,由$$变量获取
echo $$  
#得到3132
#查看指定进程
top -d 2 -p 3132

在top界面按下r可以修改进程的NICE值

NI越小越优先被执行,从小改大打可以不需要root权限,但是没有root权限不能从大改到小。

pstree:显示所有进程以及它们之间的相关性

pstree [-A|U] [-up]

-A:各个进程之间的连接以ASCII字符来连接

-U:                                以Unicode的字符来连接,在某些终端界面下可能会出现错误。

-p:同时列出每个进程的PID

-u:同时列出每个进程的所属账号名称

使用pstree可以很方便地找出进程之间的相关性。

在pstree的输出结果中我们可以看到systemd这个进程的PID是1,是Linux内核调用的第一个进程。

2)进程的管理

常用信号signal

kill -signal PID将进程关闭

需要注意kill可以将信号传递给任务或者某个进程。传递给任务是kill -signal %number,传递给进程是直接加数字kill -signal number

killall -signal 命令名称

killall [iIe] -signal 命令名称

-i:interactive若需要删除时,会出现提示字符给使用者

-e:exact,表示后面接的command name要一致,但整个完整的命令不能超过15个字符。

-I:命令名称忽略大小写。(这是i的大写不是L的小写)

3)进程的执行顺序

Priority与Nice值

系统会给予进程一个PRI值,PRI越小,越优先。

注意:PRI的值时有内核动态分配的,用户无法直接调整PRI值。用户若要调整进程的优先级就要通过nice值。

PRI(new)=PRI(old)+nice

nice为负值的时候,就会降低PRI值,就会被优先执行。

nice 值可调整的范围为 -20 ~ 19 ;
root 可随意调整自己或他人进程的 Nice 值,且范围为 -20 ~ 19 ;
一般使用者仅可调整自己进程的 Nice 值,且范围仅为 0 ~ 19 (避免一般用户抢占系统资源);
一般使用者仅可将 nice 值越调越高,例如本来 nice 为 5 ,则未来仅能调整到大于 5;

调整nice值

调整进程的nice值,就是调整进程的优先级。两种方法:

i)一开始执行进程的时候就立即给予一个特定的nice值:用nice命令;

ii)调整某个已经存在的PID的nice值:用renice命令。

nice:

nice [-n 数字] command

-n后面接数字,范围为-20~19

通常会将一些在后台运行的不重要的进程的优先级减小,将nice值增大。如备份命令。

renice

renice number PID

注:nice值会被继承。比如:修改bash的nice值,bash触发的子进程ps的nice值与bash的值相同。

4)查看系统资源信息

free:查看内存使用情况

uname:查看系统与内核相关信息

uptime:查看系统启动时间与任务负载

netstat:追踪网络或socket文件

dmesg:分析内核产生的信息

vmstat:检测系统资源变化

四.特殊文件与进程

1)具有SUID/SGID权限的命令执行状态

SUID的特点:

SUID权限仅对二进制程序有效

执行者对于该程序需要具有x的可执行权限

本权限仅在执行该程序的过程中有效

执行者将具有该程序拥有者的权限

整个SUID的权限生效是由于具有该权限的程序被触发,例如passwd执行后具有root权限,是因为执行passwd之后会触发一个新的进程与PID,该PID产生的时候会通过SUID来进行特殊的权限设置。

查找权限为

2)/proc/*代表的意义

进程都是在内存中,而内存当中的数据都写入/proc/*这个目录下

3)查询已使用文件或已执行进程使用的文件

lsof

默认是将系统上所有已经打开的文件都列出来

在非root权限下,是看不到命令的执行路径的。

在root权限下,可以看到systemd执行的地方是根目录

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!