Linux学习笔记05–进程管理
1.Linux进程概述
1.1概述
进程是计算机中程序基于某数据集合的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。进程由唯一**进程标识符(PID)**表示。
通常,父进程在子进程运行期间处于睡眠(sleeping)状态,当子进程完成时发出(exit)信号请求,在退出时,子进程已经关闭或丢弃了其资源环境,剩余的部分称为僵停(僵尸Zombie)。父进程在子进程退出时收到信号而被唤醒,清理剩余的结构,然后继续执行其自己的程序代码。
-
简单来说,进程是已启动的可执行程序的运行实例,进程有以下组成部分: ? 已分配内存的地址空间; ? 安全属性,包括所有权凭据和特权; ? 程序代码的一个或多个执行线程; ? 进程状态
1.2进程和程序
程序: 二进制文件,静态 /bin/date, /usr/sbin/httpd,/usr/sbin/sshd, /usr/local/nginx/sbin/nginx
进程: 是程序运行的过程, 动态,有生命周期及运行状态。
1.3进程状态
- 运行(running)态:进程占有处理器而正在运行
- 就绪(ready)态:进程具备运行条件,等待系统分配处理器以便运行
- 等待(wait)态:又称阻塞(blocked)态或者睡眠(sleeping)态,指进程不具备运行条件,且正在等待某个事件的完成。
1.4进程的分类
- 僵尸进程:一个进程使用fork调用创建子进程;如果子进程退出而父进程并没有调用wait或waitpid以获取子进程的状态信息,那么子进程的进程描述符就仍会保存在系统中,此时,子进程不再由父进程管理,因此就成为僵尸进程
- 交互进程:通常是由终端启动的进程。交互进程既可以在前台运行又可以在后台运行
- 批量处理进程,是一个进程序列,通常和终端没什么联系
- 守护进程:是一类在后台运行的特殊进程,用于执行特定的系统任务。通常在系统引导的时候启动,并且会一直运行到系统关闭。但也有一些守护进程只在有需要的时候才启动,完成任务后就会自动结束。
1.5进程优先级
指对CPU的优先使用级别。进程调度通过复杂的调度机制实现CPU效率最大化,调度算法包括实时调度算法、非实时调度算法等。从内核角度,优先级可分为动态优先级、静态优先级、归一化优先级等。
2.进程状态监测
2.1静态监测:查看当前进程状态的命令ps
命令功能:ps是process status的缩写,用于查看进程的状态信息
命令语法:ps [参数]
选项 | 参数含义 |
---|
a | 显示一个终端的所有进程,包括其他用户的进程 | u | 显示进程的归属用户及内存的使用情况 | x | 显示没有控制终端的进程 | l | 长格式显示更加详细的信息 | c | 列出进程时,显示每个进程真正的指令名称 | f | 显示程序间的关系 | j | 采用工作控制的格式显示进程状况 | e | 列出进程时,显示每个进程所使用的环境变量 |
[john@lab]:~$ ps
[john@lab]:~$ ps -l
[john@lab]:~$ ps -u john
[john@lab]:~$ ps -u john -l
[john@lab]:~$ ps aux
[john@lab]:~$ ps -aux
[john@lab]:~$ ps axjf
[john@lab]:~$ ps -axjf
[john@lab]:~$ ps axjfc
> ps -ef中参数-e和a功能类似,可列出所有进程
> ps ef中的e指在列出进程的时候显示每个进程所使用的的环境变量,输出比ps -ef要少
[john@lab]:~$ ps -ef | grep python
[john@lab]:~$ ps auxf | grep python
2.2动态监控:持续检测进程运行状态的命令top
命令功能:top命令能够实时持续显示系统中各个进程的资源占用情况,ps命令可以查看正在运行的进程,但属于静态监控,动态的还是得top来
命令语法:top [选项]
主要参数:
选项 | 参数含义 |
---|
-d | 秒数:指定top命令每隔几秒更新一次。默认是3秒 | -b | 使用批处理模式输出,一般和-n选项合用,用于把top命令重定向到文件中 | -n | 次数:指定top命令执行的次数,一般和-b选项合用 | -p | 进程PID:仅查看指定ID的进程 | -s | 使top命令在安全模式中运行,避免在交互模式中出现错误 | -u | 用户名:只监听某个用户的进程 |
[john@lab]:~$ top
top - 18:09:00 UP 52 min, 2 users,load average:0.12, 0.03, 0.08
任务: 290 total.....
%Cpu(s):....
MiB Mem:...
MiB Swap:...
进程 USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND
280 root 1 20 1222 2164 648 S 0.3% 1.7% 0:08.47 systemd
USER: 运行进程的用户
PR: 进程优先级
NI: nice值,负值表示优先级高,正值表示优先级低
VIRT: 进程使用的虚拟内存总量,单位KB,VIRT=Swap+RES
RES: 进程使用的且未被换出的物理内存大小,单位KB,RES=CODE+DATA
SHR: 共享内存大小,单位KB
进程状态 D=不可中断的睡眠状态;R=运行;S=睡眠;T=跟踪/停止;Z=僵尸进程
%CPU: CPU占用率
%MEM: 物理内存占用率
TIME+ 进程使用的CPU时间总计,单位(1/100)s
COMMAND 进程名称(命令名/命令行)
[john@lab]:~$ ps aux|grep sshd
[john@lab]:~$ top -p 121
[alice@tianyun ~]$ sudo yum -y install httpd
[alice@tianyun ~]$ sudo systemctl start httpd
[root@localhost~]
[root@localhost~]
[root@localhost~]
[root@localhost~]
[yang@iZm5eiwihahzq6ds23gbf6Z ~]$ cat /run/sshd.pid
830
2.3查看进程数命令pstree
命令功能:pstree命令以树状图显示进程间的关系。通过进程树,我们可以知道进程的父进程和子进程。
命令语法:pstree [选项] [进程号|用户]
主要参数:
选项 | 参数含义 |
---|
-a | 显示命令行参数 | -c | 不要对完全相同的子树进行压缩 | -h | 高亮显示当前进程及其所有祖先 | -H | 此参数的效果和指定参数-h类似,但会特别表明指定的程序 | -I | 采用长列格式显示树状图 | -n | 根据进程的PID号来排序,默认下是按程序名称 | -p | 显示进程的PID号 | -u | 显示进程对应的用户名 |
[john@lab]:~$ pstree
[john@lab]:~$ pstree -p
[john@lab]:~$ pstree -a
[john@lab]:~$ pstree -g
[john@lab]:~$ ps aux|grep sshd
[john@lab]:~$ pstree -p 1267
[john@lab]:~$ pstree john
2.4列出文件打开文件信息的命令lsof
lsof 即:list opened files
用于列出当前进程打开的文件,需要root权限
[john@lab]:~$ lsof /bin/bash
[john@lab]:~$ ps aux|grep sshd
[john@lab]:~$ sudo lsof -p 1267
[john@lab]:~$ lsof -i
[john@lab]:~$ sudo lsof -i
[john@lab]:~$ sudo lsof -i TCP
[john@lab]:~$ sudo lsof -a -u root -d txt
[john@lab]:~$ sudo lsof -a -u root -d txt |more
[john@lab]:~$ sudo lsof -r 1 -u john -i -a
3.进程状态控制
3.1 调整进程优先级的命令nice
命令功能:nice命令用户调整进程的niceness(友善度),低表示优先级高
命令语法:nice 命令[选项]
选项 | 参数含义 |
---|
-n,–adjustment=N | 将niceness设置为N(默认N=10) | –help | 显示此帮助信息并退出 | –version | 显示版本信息并退出 |
[john@lab]:~$ nice
[john@lab]:~$ nice vi&
[john@lab]:~$ ps -l
F S PID PPID C PRT NI ADDR SZ WCGAN TTY TIME CMD
0 T 133 132 0 8 0 - 18 do_sig pts/0 00:00:00 vi
通过ps -l指令可以查看进程的niceness值,值越大表示优先级越低,NI 是进程的优先级,PRI是进程当前的总优先级。并且PRI(new)=PRI(old)+NI
[john@lab]:~$ nice -n 15 vi&
'''
'''
[john@lab]:~$ sudo nice -n -15 vi&
[john@lab]:~$ sudo ps -l
'''
'''
[john@lab]:~$ nice --adjustmesnt=15 vi&
[john@lab]:~$ ps -l
直接设置-n参数也可以设置niceness值,比如,nice -15 vi& 将vi的niceness值设置为15,
如果是nice --15 vi& 的话,则会将niceness的值设置为==-15==。
为避免混淆,建议使用–adjustment参数
3.2改变运行进程优先级的命令renice
命令功能:nice命令可以为即将运行的进程设置niceness值,而renice命令用于改变正在运行的进程的niceness值
renice:可重新设置niceness值
命令语法:
renice [-n] <优先级> [-p|--pid] <pid>...
renice [-n] <优先级> -g|pgrp <pgid>...
renice [-n] <优先级> -u|--user <用户>...
主要参数:
选项 | 参数含义 |
---|
-n | 指定nice增量 | -p | 将参数解释为进程ID(默认) | -g | 将参数解释为进程组ID | -u | 将参数解释为用户名或用户组ID |
renice -8 -p 121
renice -8 -u yuyee
renice -8 -g yg
[john@lab]:~$ ps -l
[john@lab]:~$ sudo renice -8 -p 121
[john@lab]:~$ ps -l
3.3向进程发送信号的命令kill
命令功能:kill命令可以发送指定的信号到相应进程
命令语法:kill [-s 信号申明 | -n 信号编号 | -信号申明] 进程号 | 任务声明 ...
主要参数:
选项 | 参数含义 |
---|
-l | 列出全部信号名称 | -s | 指定发送信号名称 | -n | 指定发送信号编号 |
[john@lab]:~$ kill -l SIGHUP
[john@lab]:~$ kill -l SIGKILL
[john@lab]:~$ ps -l
[john@lab]:~$ kill -KILL 121
[john@lab]:~$ kill 9 122
[john@lab]:~$ ps -l
[john@lab]:~$ pidof vi
[john@lab]:~$ ps -l | grep vi
3.4通过名字杀死进程的killall
命令功能:Linux操作系统中的killall命令用于杀死指定名字的进程。
killall命令可以根据名字来杀死进程,它会给指定名字的所有进程发送信号。
命令语法:killall [选项] [进程号]
主要参数:
选项 | 参数含义 |
---|
-e | 要求精准匹配进程名称 | -I(这是i的大写) | 进程名匹配不区分大小写 | -g | 杀死进程组,注意不是进程 | -i | 交互模式,杀死进程前先询问用户 | -l(这是L的小写) | 列出所有的已知信号名称 | -q | 不输出警告信号 | -s | 发送指定的信号 | -u | 终止指定用户的所有进程 |
[john@lab]:~$ killall -9 vi
[john@lab]:~$ killall -u yuyee
4.进程启动与作业控制
Linux操作系统将正在执行的一个或者多个相关进程成为一个作业(job)。
作业时用户向计算机提交的任务实体,而进程则是完成用户任务的执行实体,是向系统申请分配资源的基本单位。
4.1进程的启动
4.2进程的挂起
通过【Ctrl+Z】组合键挂起前台任务,需要时在运行
4.3使用jobs命令显示任务状态
命令功能:Linux下的jobs命令用于显示任务状态。
命令语法:jobs [选项] [任务声明 ...]
主要参数:
选项 | 参数含义 |
---|
-l (list开头的l) | 在正常信息的基础上列出进程号 | -n | 仅列出上次通告之后改变了的状态的过程 | -p | 仅列出进程号 | -r | 限制仅输出运行中的任务 | -s | 限制仅输出停止的任务 |
[john@lab]:~$ jobs -l
[john@lab]:~$ vi
[john@lab]:~$ jobs -l
4.4使用fg命令将任务移至前台
命令功能:fg[%N]命令将指定的任务N移至前台。N是通过jobs命令查到的后台任务编号(not pid)
[john@lab]:~$ jobs -l
[1]- 121
[2]+ 132
【说明】:“+”表示该进程是当前任务;“-”表示不是当前任务
[john@lab]:~$ fg
[john@lab]:~$ fg %1
4.5使用bg 命令将任务移至后台
命令功能:使用bg[%N]将选中的任务N移至后台执行
eg>>> bg 2
4.6使用nohup命令启动脱离终端运行的任务
命令功能:nohup命令可以忽略挂起信号运行的指令
命令语法:nohup命令 [参数]
一般情况下通过终端启动进程后,该进程和终端是相互关联的,若终端关闭,则该进程也会终止。
nohup可以使得命令不断开,继续运行,常和&搭配使用
[john@lab]:~$ ping.www.ubuntu.com
[john@lab]:~$ nohup ping.www.ubuntu.com
[john@lab]:~$ ls nohup.out
[john@lab]:~$ jobs
[john@lab]:~$ tail nohup.out
[john@lab]:~$ tail nohup.out -f
[john@lab]:~$ jobs
[john@lab]:~$ ps -ef | grep ping
[john@lab]:~$ kill -9 121
[john@lab]:~$ ps -ef | grep ping
参考资料:Ubuntu Linux 操作系统案例教程【张平】 本文链接:https://blog.csdn.net/qq_46426207/article/details/121921543
|