文章目录
一、程序和进程
1.程序和进程和线程的关系
1.程序
存储在磁盘中的可执行代码
2.进程
进程是程序的运行实例
进程可以创建子进程
进程是硬件资源分配的最小单位;进程只负责接收任务,不处理任务;线程是真正参与到实际应用当中的
3.线程
线程是程序执行的最小单位
线程依赖于进程存在,是进程中的执行单元
线程间由于共享相同的地址空间,资源更容易共享
如何确定一个程序 是多线程 还是 单线程?
grep -i threads /proc/进程的PID/status
/proc里面保存了各个进程的信息
2.僵尸进程
僵尸进程:
一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个
进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进
程的子进程,如果是的话,就由Init来接管它,成为它的父进程,子进程退出后init会回收其占用的相关
资源。但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进
程将成为一个僵厂进程。
父进程退出 子进程没有退出 那么这些子进程就没有父进程来管理了, 就变成僵尸进程
3.ps命令查看静态的进程统计信息
1.常用的参数
-a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将显示系统中所有的进程信息。
-u:使用以用户为主的格式输出进程信息。
-x:显示当前用户在所有终端下的进程信息。
上述输出信息中,第一行为列表标题,其中各字段的含义描述如下。
USER:启动该进程的用户账号的名称。
PID:该进程在系统中的数字 ID 号,在当前系统中是唯一的。
%CPU:CPU 占用的百分比。
%MEM:内存占用的百分比。
VSZ:该进程使用的虚拟内存量(KB)。
RSS:该进程占用的物理内存量(KB)。
TTY:表明该进程在哪个终端上运行。不是从终端启动的进程则显示为?。
STAT:该进程的状态
状态代码 | 含义 |
---|---|
R | 进程正在运行或在运行队列中等待 CPU 时间 |
S | 处于休眠状态,可被唤醒 |
D | 不可中断的休眠状态 |
T | 进程已被停止 |
Z | 僵尸进程,进程已经中止,但是部分程序还在内存当中 |
+ | 表示当前进程运行在前台 |
- | 普通进程 |
< | 高优先级进程 |
N | 低优先级进程 |
L | 有实时锁的进程 |
例:R+:表示这是一个运行在前台的进程
Ss:表示进程当前处于睡眠状态,正在等待用户输入或其他资源
START:启动该进程的时间。
TIME:该进程占用的 CPU 时间。
COMMAND:启动该进程的命令的名称
4.top命令:查看进程动态信息
头部信息
- load average : 衡量系统在特定时间间隔内处理进程负载能力的指标
- 系统任务(Tasks):总共217个任务,1个正在运行,215处于睡眠状态,1个停止,0个僵尸进程
- cpu占用率(%Cpu): us:用户空间占用的 CPU 百分比
sy:系统空间占用的 CPU 百分比
ni:用户进程空间中改变过优先级的 CPU 百分比
id:空闲 CPU 百分比
wa:等待 I/O 操作的 CPU 百分比
hi:硬件中断请求占用的 CPU 百分比
si:软件中断请求占用的 CPU 百分比
st:被虚拟机占用的 CPU 百分比 - KiB Mem : total:系统总共有 1863248 KiB 的物理内存,free: 96384 KiB 空闲,used:783880 KiB 已被使用,buff/cache: 982984 KiB 被用作缓冲或缓存。
- KiB Swap:表示交换空间的使用情况。total:交换空间的总量是 4095996 KiB。free:当前未使用的交换空间量为 4095732 KiB。used:已经被使用的交换空间量为 264 KiB。avail Mem:可用内存量为 776448 KiB。
行进程信息
6. PID 进程 id
7. USER 进程所有者的用户名
8. PR 进程的优先级(由内核动态调整)
9. NI 进程的相对优先级。 nice 值。负值表示高优先级,正值表示低优先级,用户可以自己调整
10. VIRT虚拟内存的大小,是进程正在使用的所有内存(ps 中标为 VSZ)
11. RES 是进程所使用的物理内存。实际实用内存(ps 中标为 RSS)
12. SHR 共享内存大小
13. S 进程状态。
14. %CPU 上次更新到现在的 CPU 时间占用百分比
15. %MEM 进程使用的物理内存百分比
16. TIME+ 进程使用的 CPU 时间总计,单位 1/100 秒
17. COMMAND 启动该进程的命令
top 命令全屏操作界面快捷键:
- 默认 3s 刷新一次,按 s 修改刷新时间按空格 :立即刷新。
- P:按 CPU 排序
- T: 按时间排序
- M:按内存排序
- N:根据启动时间进行排序
- q:退出 top 程序
注:若通过 top 排名工具发现某个进程 CPU 占用率非常高,需要终止该进程的运行,可以在 top 操作界面中按 k 键,然后在列表上方将会出现“PID to signal/kill [default pid = 3180]:” 的提示信息,根据提示输入指定进程的 PID 号并按 Enter 键, 出现“Send pid 5597 signal [15/sigterm]”的二次确认的提示信息,然后按Enter 键确认即可终止对应的进程。
5.pgrep命令查询进程信息(根据进程名查询)
1.pgrep -l “log” 列出所有进程名中包含"log"字符串的进程的完整命令行
-l 同时输出对应的进程名以及PID
2.列出所有属于 “root” 用户的进程
-U:选项查询特定用户的进程
-t:选项查询在特定终端运行的进程
6.pstree命令以树形结构列出进程信息
1.以树形结构显示root用户的进程
-p:选项使用时可以同时列出对应的PID号
-u:选项可以列出对应的用户名
-a:选项可以列出完整的命令信息
7.控制进程(前后台)
1.可以使用 & 符号,将前台进程转至后台,这样不用等待进程运行结束就可以z输入其他命令
jobs 查看后台运行的任务
2.可以使用fg 加对应进程id,来让后台进程转为前台进程,ctrl+z可以暂停,再输入fg 2 可以继续,输入bg 可以继续转到后台工作
8.kill终止进程
1.输入对应的pid终止进程
2.对于无法正常终止的进程,可以使用 kill-9 来强行杀死
3.killall 可以杀死全部相关的命令,也可以使用 -9
4.pkill可以终止指定的用户或者终端的操作,-U 指定用户,-t 指定终端,也可以使用 -9
9.计划任务管理(at,crontab)
1.at命令
at命令设置的计划任务只在指定的时间点执行一次,命令输入完毕后按ctrl+D提交任务
at命令设置的计划任务,可以用atq查看,然后用atrm + 指定id 删除任务
2.crontab周期性任务(命令最好使用绝对路径)
crontab -e #编辑cron服务
crontab -u 用户名 #指定XX用户的cron服务
crontab -l #列出当前用户下的cron的详细内容
crontab -u zx -l #列出zx用户下的cron的详细内容
crontab -r #删除所有用户的cron内容,普通用户执行,只删除自己的cron内容
crontab -r -u zx #删除zx用户的cron内容
使用前最好先查看一下crond服务是否运行
编辑好计划任务后,可以重启一下crond服务,确保任务进行
例:每个4月11号的八点30分执行命令
每周2点11分执行命令
每四天的那天每次间隔2小时执行命令
编辑用户yy的计划任务
删除用户yy的计划任务
管理员下使用crontab -r 是删除所有人的计划任务
普通用户执行crontab -r 只删除自己的计划任务