1.什么是程序
没有运行的代码就是程序
2.什么是进程
运行中的程序结束进程,进程就是程序的副本
协程
协程运行:控制谁先运行
如何确定一个程序是多线程还是单线程
精确的看:
存放进程的文件夹是/proc/,cd/proc
在里面显示进程的pid号,cd/proc/pid号里,找一个status文件
status文件里存放着进程非常详细的信息,cat查看
还有两种方法也可以使用:
1.grep -i threds /proc/进程的pid/status
2.prtstat 进程pid号
进程使用内存的问题
内存泄漏:Memory Leak
某个程序申请了,但是没有用,对于系统而言他一直占用这块内存
内存溢出:Memory Overflow
内存空间溢出
内存不足:OOM(out of memory)
内存用完了,系统会选一个程序将之杀死,在日志messages中会看到类似下面的提示
Jul 10 10:20:30 kernel: Out of memory: Kill process 9527 (java) score 88 or sacrifice child
当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个error,因为这个问题已经严重到不足以被应用处理。
进程状态
进程的基础状态:
创建状态
就绪状态
执行状态
阻塞状态
终止状态
进程更多的状态:
运行状态:running
就绪状态:ready
睡眠状态:分两种,可中断,不可中断
停止状态:stopped,暂停
僵尸状态:zombie,僵尸状态,父进程结束前,子进程不关闭,杀死父进程可以关闭僵尸状态的子进程。资源不会回收就会变成僵尸进程(结束父进程就可以解决)
杀进程
kill -9 pid:强制杀死
killall 程序名:强制结束进程
进程之间通讯:
同一主机:
1.pipe:管道,单向传输 cmd1 | cmd2
2.socket:套接字文件,ip地址和端口号
3.Memory-maped file: 文件映射,将文件中的一段数据映射到物理内存,多个进程共享这片内存 shm shared memory:共享内存
4.lock:上锁,对资源上锁
5.signal:信号,发送信号给进程
进程的优先级
如何判断进程优先级的高低
1.输入ps -elf|head 它的作用是显示系统中前10个进程的详细信息。
-
PRI是系统出生自带的优先级
-
NI是后期人为调的优先级(调节的范围是-20到+19)
查看进程ps axo pid,comm,ni
ps axo pid,comm,ni命令用于查看进程的进程ID、进程名和优先级。其中,pid表示进程ID,comm表示进程名,ni表示优先级。ni的值越小,表示进程的优先级越高
更改优先级的命令:都是临时修改,重启就没了
1.nice -n -10 ping 127.0.0.1
2.renice -n -20 2118
进程分类
操作系统分类
协作式多任务
抢占式多任务
进程类型
守护进程:daemon,在系统引导过程中启动的进程,和终端无关进程
前台进程:跟终端相关,通过终端启动的进程
3.进程管理的相关命令
ps:查看进程信息(静态)
默认显示当前终端中的进程信息,linux系统各进程的相关信息均保存在/proc/数字 目录/status下的文件中
查看静态的进程统计信息
-
ps -elf |head:显示当前系统中所有进程的前10行信息。head命令则用于显示文件的前几行,默认为前10行。
-
ps aux :可以查看系统中所有的进程;
-
ps -le 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;
-
ps -l 只能看到当前 Shell 产生的进程;
选项 | 作用 |
---|---|
a | 查看当前终端下的所有进程信息,包括其他用户的进程。与x选项结合时显示系统中所有进程信息 |
-a | 用于显示所有终端下的进程,包括其他用户的进程。ps -a命令不会显示没有控制终端的进程。 |
u | 使用以用户为主的格式输出进程信息 |
x | 显示当前用户在所有终端下的进程信息 |
-e | 显示系统内的所有进程信息 |
-l | 使用长格式显示进程信息 |
-f | 使用完整的格式显示进程信息 |
k | 按百分比查找,语法(ps aux k -%表头) |
o | 选项显示定制的信息,如 |
查看进程的特定属性
ps axo pid,cmd,%mem,%cpu
按CPU利用率倒序排序
ps aux k -%cpu -是倒序的意思
user | 进程属于哪个用户 |
---|---|
pid | 进程号,程序的进程号是唯一的 |
%cpu | 进程占用cpu的百分比 |
%mem | 进程占用物理内存的百分比 |
vsz | 占用虚拟内存的大小,kb |
RSS | 占用的物理内存量,具体占了多少(kb) |
tty | 从哪个终端起的,不是终端起的都是? |
stat | 进程的状态信息 D:不可唤醒的睡眠状态 R:运行S:处于休眠状态但可以被唤醒t:停止状态Z:僵尸进程N:低优先级<:高级选项s:包含子进程 |
start | 运行开始时间 |
time | 分片时间,占用cpu时间 |
command | 进程名 |
解决僵尸进程
模拟出僵尸进程
1.先停止父进程,再杀掉子进程,子进程就变成僵尸进程了
2.ps aux |grub Z 过滤出僵尸进程
3.杀死父进程,或者恢复父进程,僵尸进程就没有了。或者直接重启
中病毒的解决思路
中病毒很明显的表现形式:内存或cpu使用量过高
1.首先倒序查看cpu使用率,使用的过高的,根据他的pid号到proc下去查找
2.找到exe文件,ll exe,就能看到他的软连接的真实文件路径,删掉。不过会出现病毒反复再出现的情况
3、然后在同目录下先建一个同名文件,并加上一个不可删除的权限,可以暂时缓解病毒的问题,再顽强就解决不了了,只能重装系统
五大性能
内存:free top
cpu:top(动态) ps aux(静态)
磁盘大小:lsblk 剩余:df
磁盘读写:iostat dd vmstat
网络:dmstat iftop
top命令:查看动态的进程信息
看内存使用率,看cpu使用率,看进程,都可以用它,磁盘,网络流量看不了
选项:
-
-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,需要安装,安装的命令:yum install htop -y
pidof
语法:pidof 进程
查看进程的pid号
pstree命令进程树
以树形结构列出进程信息
pstree -p 显示进程树,并显示进程号
lsof找回删除文件
lsof:列举系统中已经被打开的文件
echo “ ” > bigfile 把bigfile里的内容转变成一个空格
为什么删除了文件但是空间不释放
是因为有人在使用该文件
那么如何找回删除的文件
lsof |grep delete 找回删除文件,找到文件的编号
误删的文件可以找回,有人在使用的情况下可以使用
cd到/proc/编号,再cd到fd里,ll里面的文件,根据里面的文件去挖数据
如果没有人在使用,那就没有了,找不回来了。
vmstat
可用来监控 CPU 使用、进程状态、内存使用、虚拟内存使用、硬盘输入/输出状态等信息
字段 | 含义 |
---|---|
procs | 进程信息字段: -r:等待运行的进程数,数量越大,系统越繁忙。 -b:不可被唤醒的进程数量,数量越大,系统越繁忙。 |
memory | 内存信息字段: -swpd:虚拟内存的使用情况,单位为 KB。 -free:空闲的内存容量,单位为 KB。-buff:缓冲的内存容量,单位为 KB。-cache:缓存的内存容量,单位为 KB。 |
swap | 交换分区信息字段: -si:从磁盘中交换到内存中数据的数量,单位为 KB。 -so:从内存中交换到磁盘中数据的数量,单位为 KB。这两个数越大,表明数据需要经常在磁盘和内存之间进行交换,系统性能越差。 |
io | 磁盘读/写信息字段: -bi:从块设备中读入的数据的总量,单位是块。 -bo:写到块设备的数据的总量,单位是块。这两个数越大,代表系统的 I/O 越繁忙。 |
system | 系统信息字段: -in:每秒被中断的进程次数。 -cs:每秒进行的事件切换次数。这两个数越大,代表系统与接口设备的通信越繁忙。 |
cpu | CPU信息字段: -us:非内核进程消耗 CPU 运算时间的百分比。 -sy:内核进程消耗 CPU 运算时间的百分比。 -id:空闲 CPU 的百分比。 -wa:等待 I/O 所消耗的 CPU 百分比。 -st:被虚拟机所盗用的 CPU 百分比 |
内存:free
free
free -h
free -m 以m为单位查看
echo 3 > /proc/sys/vm/drop_caches 清除缓存
iostat
iostat 可以提供丰富的IO性能状态数据
选项 | 作用 |
---|---|
-c | 只显示cpu行 |
-d | 显示设备(磁盘)使用状态 |
-k | 以千字节为单位显示输出 |
-t | 在输出中包括时间戳 |
-x | 在输出中包括扩展的磁盘指标 |
iotop:监视磁盘
需要安装依赖包 :yum install iotop -y
可以看到吞吐量
uptime:系统运行了多久时间
当前时间 运行时间 登录用户
mpstat:显示cpu相关统计
系统资源统计 dstat
yum install dstat -y
webadin 图像界面
官网:Webmin
yum install webmin-2.100-1.noarch.rpm -y
rpm -q webmin
systemctl start webmin
systemctl status webmin
root
自己系统的密码
4.进程管理
进程的启动方式
手动启动:
前台启动:用户输入命令,直接执行程序
后台启动:不影响当前的操作,在命令行尾加入&符号
查看后台任务列表:jobs
[root@localhost ~]#jobs [1]- Stopped cp -i -r /data/* /opt/ [2]+ Stopped top
调出后台任务:fg
[root@localhost ~]#jobs [1]- Stopped cp -i -r /data/* /opt/ [2]+ Stopped top [root@localhost ~]#fg 1 fg 加上序号 序号怎么看 jobs
停止作业:ctrl+z
放到后台但是会停止作业
继续任务bg
bg 工作号 可以从新开始停止的服务
并行执行任务
例如:ping127.0.0.1&ping127.0.0.2&ping172.0.0.3& 就会一起ping测,但是无法停止,停止命令是:killall ping(可以不连打,打出来就行)
结束进程
结束进程命令:
命令 | 语法 | 选项 | 作用 |
---|---|---|---|
kill | kill[信号]pid | -9 强制结束 | kill 命令会向操作系统内核发送一个信号和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作 |
killall | killall [选项] [信号] 进程名 | -i:交互式,询问是否要杀死某个进程。-l:忽略进程名的大小写 | killall 命令不再依靠 PID 来杀死单个进程,而是通过程序的进程名来杀死一类进程 |
pkill | pkill [-t 终端号] 进程名 | -U:根据进程所属的用户名终止相应进程-t:根据进程所在的终端终止相应进程 | pkill 命令和 killall 命令的用法相同,都是通过进程名杀死一类进程 |
5.计划任务
crontab:计划任务管理周期
cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
crontab -e:编辑一个定时任务,执行命令最好用绝对路径
项目 | 含义 | 范围 |
---|---|---|
第一个" * " | 一小时当中的第几分钟(minute) | 0~59 |
第二个" * " | 一天当中的第几小时(hour) | 0~23 |
第三个" * " | 一个月当中的第几天(day) | 1~31 |
第四个" * " | 一年当中的第几个月(month) | 1~12 |
第五个" * " | 一周当中的星期几(week) | 0~7(0和7都代表星期日) |
特殊符号 | 含义 |
---|---|
*(星号) | 代表任何时间。比如第一个" * "就代表一小时种每分钟都执行一次的意思。 |
,(逗号) | 代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。 |
-(中杠) | 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。 |
/(正斜线) | 代表每隔多久执行一次。比如"*/10命令",代表每隔 10 分钟就执行一次命令。 |
示例:
怎么删除定时任务:crontab -r -u
在书写 crontab 定时任务时,需要注意以下几个事项:
-
6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间。
-
crontab 定时任务的最小有效时间是分钟,最大有效时间是月。像 2018 年某时执行、3 点 30 分 30 秒这样的时间都不能被识别。
-
在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆。
-
在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命令会报错。