目录
lsof:(list opened files)列举系统中已经被打开的文件
iostat:提供丰富的I/O性能状态数据(sysstat包提供)
程序
-
是一组计算机能识别和执行的指令
-
用于描述进程要完成的功能,是控制进程执行的指令集
进程
-
指运行中的程序,是程序的副本
-
存储在内存中
创建:
-
init:第一个进程,从CentOS 7以后为systemd
-
进程:都有其父进程创建,fork,父子关系,Cow:Copy On Write写实时更新,有数据写入子进程需要新的内存空间
特征:
-
动态性:进程是程序的一次执行过程,是临时的,有生命周期的,是动态产生,动态消亡的;
-
并发性:任何进程都可以同其他进程一起并发执行;
-
独立性:进程是系统进行资源分配和调度的一个独立单位;
-
结构性:进程有程序、数据和进程控制块三部分组成。
内核的功用:进程管理、内存管理、文件系统、网络功能、驱动程序、安全功能等
如何分辨进程和线程
-
pstree:查看进程树(查找进程信息较为模糊,分不清主、子进程)
-
ls /proc/:可以查看进程相关信息
-
/proc/:存放进程
-
每运行一个进程就会产生一个进程号
-
-
cd 进程号 :进入进程号目录
-
cat status:查看进程详细信息
-
Threads:后面数字显示是否为1,为一代表着单线程(精确)
-
-
cat /proc/pid进程号/status(以上步骤可以综合成这一条命令)
-
grep -i threads /proc/进程的PID/status:查看进程中的线程
-
prtstat 进程号:也是查看进程的详细信息
进程使用内存的问题:
虚拟内存:
-
内存泄露:Memory Leak
-
内存溢出:Memory Overflow
物理内存:
-
内存不足:OOM
pmap 进程id:查看进程的内存使用情况
进程的状态:
-
创建状态:创建进程时申请一个空白PCB,填写控制和管理进程的信息,完成资源分配。
-
就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行
-
执行状态:进程处于就绪状态被调度后,进程进入执行状态
-
阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。
-
终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行
-
运行状态:running
-
就绪状态:ready
-
睡眠状态:分为两种,可中断:interruptable,不可被中断:uninterruptable
-
停止状态:stopped,暂存与内存,但不会被调度,除非手动启动
-
僵死状态:zombie,僵尸态,结束进程,父进程结束前,子进程不关闭,杀死父进程可以关闭僵死态的子进程
-
僵尸进程:子进程如果出现意外关闭,父进程无感知就不会收回资源,及人为关闭父进程,资源不会回收就会产生僵尸进程
-
进程之间的通讯:
同一主机:
-
pipe:管道,单向传输(管道符:cmd1 | cmd2)
-
mkfifo tmp.fifo:创建临时性的管道文件
-
-
socket:套接字文件,双工通信(IP地址和端口号)
-
Memory-maped file:文件映射,将文件中的一段数据映射到物理内存,多个进程共享这片内存
-
shm shared memory:共享内存
-
signal:信号(kill 给进程发送信号,告诉进程应该关闭了,不能管理进程)
-
Lock:对资源上锁,如果资源已被某进程锁住,则其它进程想修改甚至读取这些资源,都将被阻塞,直到锁被打开
-
semaphore 信号量,一种计数器
不同主机:socket=IP和端口号
-
RPC remote procedure call:远程调用
-
MQ 消息队列,生产者和消费者,如:Kafka,RabbitMQ,ActiveMQ
进程的优先级:
进程优先级调整:
-
静态优先级:100-139
-
进程默认启动时的nice值为0,优先级为120
-
只有根目录才能降低nice值(提高优先性)
进程分类:
-
守护进程:daemon,在系统引导过程中启动的进程,和终端无关进程
-
前台进程:跟终端相关,通过终端启动的进程
进程管理相关的命令
ps:(process state)查看静态的进程统计信息
语法:
ps [选项] [进程]:查看静态进程信息
-
Linux系统进程的相关信息均保存在/proc/pid进程号/status下
-
查看进程信息、内存、CPU使用率等(只能显示当前终端的应用程序)
[选项]:
-
UNIX选项:-A -e
-
GUN选项:--help
-
BSD选项:a
常用选项:
-
a:显示当前终端下的所有进程信息,包括其他用户的进程。与"x"选项结合时将示系统中所有的进程信息
-
u:使用以用户为主的格式输出进程信息
-
x:显示当前用户在所有终端下的进程信息
-
-e:显示系统内的所有进程信息
-
-l:使用长(Long)格式显示进程信息
-
-f:使用完整的(Full)格式显示进程信
-
k|--sort [属性]:对属性排序,属性前加 - 表示倒序
-
ps aux k -%cpu
-
-
o [属性] [选项]:显示定制的信息 pid、cmd、%cpu、%mem
查看静态的进程统计信息:
-
ps aux:查看系统中所有的进程(常用,必须记住!!!)
-
ps -elf:可以完整查看系统中所有的进程,并能看到父进程的PID和优先级
-
ps axo [查看信息] |[执行命令]:在系统中挑选查看的进程内容
pstree命令:显示信息进程树
pstree -p:显示进程树并显示进程号
模拟结束僵尸进程:
过滤僵尸进程:
ps aux |grep -v grep |grep Z
急救处理病毒程序:
排查病毒
解决病毒
chattr +i [文件名] :建立超级管理员也无法删除的文件
top:动态查询进程信息
语法:
top [选项] [进程]:动态查询进程信息
[选项]:
-
-d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒;
-
-b:使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;
-
-n 次数:指定 top 命令执行的次数。一般和"-"选项合用;
-
-p 进程PID:仅查看指定 ID 的进程;
-
-s:使 top 命令在安全模式中运行,避免在交互模式中出现错误;
-
-u 用户名:只监听某个用户的进程;
在top命令显示窗口可用命令交互:
-
? 或 h:显示交互模式的帮助;
-
c:按照 CPU 的使用率排序,默认就是此选项;
-
M:按照内存的使用率排序;
-
N:按照 PID 排序;
-
T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;
-
k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;
-
r:按照 PID 给某个进程重设优先级(Nice)值;
-
q:退出 top 命令;
补充:htop进化版的top(需自行安装)
总结查看设备性能的命令:
-
内存:free、top
-
cpu:top、ps aux
-
磁盘大小:lsblk、看剩余df
-
读写:iostat、dd、vmstat
-
网络:dmstat、iftop
pgrep:查看指定的进程
[选项]:
-
-U:指定用户
-
-l:显示进程名
-
-a:显示完整格式的进程名
-
-P pid:显示指定进程的子进程
pidof:查看程序的pid号
pidof 程序名
lsof:(list opened files)列举系统中已经被打开的文件
语法:
lsof [选项]:
[选项]:
-
-c 字符串:列出字符串开头进程打开的文件
-
+d 目录名:列出某个目录中所有被进程调用的文件
-
-u 用户名:只列出某个用户的进程打开的文件
-
-p pid:列出某个pid进程打开的文件
lsof | more:查询系统中所有进程调用的文件
删除文件后,硬盘不释放:
-
方法一:将原有内容覆盖
-
方法二:恢复误删的文件
lsof |grep delete:过滤出正在使用的被删除文件
kill -9 pid号:杀掉进程
补充:
vmstat:监控系统资源、虚拟磁盘
free :查看内存空间
-
free -h:人性化查看
-
free -m:以m为单位查看
-
清除缓存:
-
echo 3 > /proc/sys/vm/drop_caches
-
iostat:提供丰富的I/O性能状态数据(sysstat包提供)
[选项]:
-
-c:只显示CPU行
-
-d:显示设备〈磁盘)使用状态
-
-k:以千字节为为单位显示输出
-
-t:在输出中包括时间戳
-
-x:在输出中包括扩展的磁盘指标
iostat 1 -d /dev/sda:只看sda硬盘
查看进程信息扩展命令:
iotop:监控磁盘I/O(需要安装)
iftop -i ens33:监控网络流量(iftop也需安装)
dstat:系统资源统计
webmin:用户管理,可以直接监控设备信息,但只能对单台使用(需自行安装)
w |grep user:查看登录的所有用户数
进程的启动方式
-
手动启动:用户输入命令,直接执行程序
-
后台启动:在命令行尾加入“&”符号(不影响当前操作)
将前台任务放入后台执行:
-
dd if=/dev/zero of=/dev/null &
-
jobs:查看在后台运行的进程
-
fg 1(序号):将后台进程重新调回前台
-
Ctrl z:将进程再调回后台,并停止
-
bg 1(序号):继续后台命令
计划任务
at :设置一次性执行任务(通常可用于定时重启)
at [选项] [时间] [日期]
atq:查看未执行的任务
at队列存放在/var/spool/at目录中
crontab:设置周期性计划任务
-
按照预先设置的时间周期重复执行用户指定的命令操作
-
属于周期性计划任务
-
主要配置文件
-
全局配置文件位置:/etc/crontab
-
系统默认的设置位置:/etc/cron.*/
-
用户自定义的设置位置:/var/spool/cron/用户名
-
语法:
crontab [选项] [任务内容]
[选项]:
-
-e:定制一个定时任务
-
类似于进入vim编辑器
-
可以使用cat /etc/crontab查看编辑格式
-
-
* * * * * [执行的命令]:分别代表
-
分:0-59
-
时:0-23
-
日:1-31
-
月:1-12
-
周:0-6,0和7代表sunday
-
-
数值的特殊表示方法:
-
*:代表该范围内的任意时间
-
,:代表间隔的多个不连续时间点
-
-:表示一个连续的时间范围
-
/:指定间隔的时间频率
-
例:
0 17 * * 1-5:周一到周五每天17:00
30 8 * * 1,3,5:每周一、三、五的8:30
0 8-18/2 * * *:8:00到18:00之间每两小时
0 * */3 * *:每三天
-
-
-l [-u 用户名]:查看计划任务
-
-r:删除计划任务
注意:命令执行的目录必须是绝对路径,为方便书写可以将相对路劲的目录写入文件:
-
echo $PATH
-
将PATH=路径写入计划任务
补充:
date +%F :代表当前日期(文件名写入编辑器命令时需在%前加入\符号)