进程和线程的基本区别
1、进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)
2、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。 而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
3、线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。
4、但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
ps查看静态进程信息
ps aux 静态查看进程信息(- 可以不加)
- a:显示终端上的进程,包括其他用户的进程
- u:表示列出进程的用户
- x:显示所有终端的进程
- 终端(与计算机系统相连的一种输入输出设备)
- USER:进程的用户
- PID:进程的ID
- %CPU:进程占用的CPU百分比
- %MEM:占用内存的百分比
- VSZ:该进程使用的虚拟内存量(KB)
- RSS:该进程占用的物理内存量(KB)
- TTY:启动进程的终端名
- STAT:该进程的状态(D:不可中断的休眠状态 R:正在运行的状态 S:处于休眠状态,可被唤醒 T:停止状态,挂起装填 Z:僵死状态[子进程比父进程先结束,而父进程又没有回收子进程的机制] )
- START:该进程被触发启动时间
- TIME:该进程实际使用CPU运行时间
- COMMAND:进程的启动命令
ps -elf 【ps -ef 显示常用的信息】
- -e:显示系统内的所有进程信息
- -l:使用长格式显示进程信息
- -f:使用完整的格式显示进行信息
- -a:显示所有进程pid
- -T:查看进程信息
- ps-Ta 显示所有线程
- F:内核分配给进程的系统标记
- S:进程的状态
- ULD:启动这些进程的用户
- PID:进程的进程ID
- PPID:父进程的进程号(如果该进程是由另一个进程启动的)
- C:进程生命周期中的CPU利用率
- PRI:进程的优先级(越大的数字代表越低的优先级)
- NI:谦让度值用来参与决定优先级
- ADDR:进程的内存地址
- SZ:假如进程被换出,如需要交换空间的大致大小
- WCHAN:若该进程在休眠,则显示睡眠中的系统函数名
- STLME:进程启动时的系统时间
- TTY:进程启动时的终端设备
- CMD:进程的启动命令
top动态查看进程
Linux系统自带的查看动态进程的命令(top)
load average: 0.00, 如果这个数字值≥CPU数量时 此时CPU使用率属于饱和状态【如果饱和率长时间达到70%-80%就应该注意】
top - 20:34:16 //当前的系统时间
up 23:53, //当前系统启动了多久
4 users, //当前有多少用户登录系统
load average: 0.00, //系统中CPU的使用率的饱和度 后面的数字代表 1分钟前 5分钟前 15分钟前 到现在的系统处理的任务数 后面的值和CPU的数量是一样的
查看CPU的方法 (lscpu top按1)
Tasks: 201 total, 1 running, 200 sleeping, 0 stopped
%Cpu(s): //默认查看所有CPU
0.0 us, //用户占用
0.0 sy, //系统占用
0.0 ni, //优先级调度占用
100.0 id, //CPU空闲率
0.0 wa, //(读写)占用情况
0.0 hi, //软中段
0.0 si, //虚拟化占用
KiB Mem : 2031912 total, //当前所有的内存
109220 free, //可以内存
746892 used, //已经使用的内存
1175800 buff/cache //内存和交换内存的缓冲区综合
KiB Swap: 4194300 total, 4180072 free, 14228 used. 1045016 avail M
PID USER PR NI VIRT RES SHR S %CPU
20608 root 20 0 157716 2280 1544 R 0.3
1 root 20 0 193700 5348 3276 S 0.0
- PID:进程id
- USER:进程所有者的用户
- PR:优先级
- NI:谦让度值,负责表示高优先级,正值表示第优先级
- VIRT:进程使用的虚拟内存总量,单位KB
- RES:进程使用的物理内存大小:单位KB
- SHR:共享内存大小,单位KB
- S:进程状态
- %CPU:上次更新到现在的CPU时间占用百分比
- %MEM:进程使用的物理内存百分比
- TIME+:进程使用的CPU时间总计,单位1/100秒
- COMMAND:命令行/命令名
top快捷键
| 按键 | 表达的意思 |
|---|---|
| P | 根据CPU使用百分比大小排序 |
| M | 根据驻留内存大小进行排序 |
| N | 根据启动时间进行排序 |
| c | 切换显示命令名称和完整命令 |
| h | 可以获得top程序的在线帮助 |
| K | 根据提示输入指定程序的PID好并按Enter 键终止对于的进程 |
| q | 退出 top程序 |
| 1 | 显示CPU个数和状态 |
top-H :显示所有线程
top-H -p :显示特定进程中的线程
atop是一款用于监控Linux系统资源与进程的工具,它以一定的频率记录系统的运行状态,所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中,服务器出现问题后,我们可获取相应的atop日志文件进行分析,其比较强大的地方是其支持我们分析数据时进行排序、视图切换、正则匹配等处理。 本文记录了yum与源码包两种方式安装方式
安装atop
yum install epel-release
yum install -y atop
pgrep 查看进程信息
pgrep -l 'log' 显示进程名
pgrep -l -U teacher -t tty2
-U:指定特定用户
-t:指定终端
pstree查看进程树
pstree -aup (加用户名)
- -a:显示完整信息
- -u:列出对应用户名
- -p:列出对应PID号
控制进程
手动启动
前台启动:用户输入命令
后台运行:在命令尾部加上‘&’符号
调度启动
进程的前后台调度
Ctrl+z 将当前进程挂起 即调入后台并停止执行
Jobs 查看处于后台的任务列表 jobs [-l]
Fg 将后台进程恢复 加序号
终止进程的运行
Ctrl+c 中断正在实行的命令
kill与killall命令
Kill 用于终止 指定 PID号的进程(可以准确的终止进程)
killall用于终止指定名称相关的所有进程(可能会误杀到相关的进程,但是会清除的更干净一些)
-9 选项用于强行终止
kill默认传15代表的信号为SIGTERM,这是告诉进程你需要被关闭,请自动停止运行并退出,进程可以清除缓存自行结束,也可以拒绝结束
Kill-9代表的信号是SIGKILL,表示进程终止,需要立即退出,强制杀死改进程,这个信号不能被捕捉也不能被忽略。
在实际的工作之中建议使用Kill来杀进程,因为有的进程可能附带着一些重要的进程,Kill-9要谨慎使用,如果客户在使用这段进程就会导致很多不必要的麻烦
pkill命令
Pkill -U 根据进程所属的用户名终止相应进程
Pkill -t 指定终端
Pkill 【进程名】 根据进程名去杀
Pkill -u 【用户】 -L 【终端】
计划任务管理
一次性计划任务at命令
at 【时间:】【yyyy-mm-dd】编辑任务
使用crontab命令,设置周期性计划任务
Ctrl +D 提交任务
atq 查看未执行的任务列表
atrm +序号 删除任务列表
周期性任务crontab命令
(u缺少时默认是对当前用户)
编辑计划任务
crontab-e[-u用户名](u缺少时默认是对当前用户)
查看计划任务
crontab -l[-U 用户名]
删除计划任务
crontab -r[-u 用户名]
设置时间周期的顺序:
分(分钟) 时(小时) 日(天) 月 周 命令或者脚本文件
时间数值的特殊表达方法:
*表示该范围内的任意时间
,表示间隔的多个不连续时间点
-表示一个连续的时间范围
/指定间隔的时间频率*/
举例理解:
0 10 * * 1-2 周一到周二每天10:00
10 8 * * 1,2,3 每周一,二,三的8:10分
0 2-10/2 * * * 2点到10点之间每2小时
0 * */1 * * 每1天
主要设置文件:
全局配置文件,位于文件:/etc/crontab
系统默认的设置:位于目录:/etc/cron.*/
用户定义的设置:位于文件:/var/spool/cron/用户
总结
查看进程的命【ps,top,pgrep,pstree】
进程控制:
启动进程,调度进程,终止进程
at命令设置一次性计划任务
crontab命令设置周期性任务