声明:这一章问题是“进程调度有哪些⽅式?”
答案:
- 先来先服务
- 短作业优先
- 优先级调度
- 高响应比优先调度
- 时间片轮转调度
- 多级反馈队列调度
下面是进程的使用整理,上面纯粹八股
进程
top
[guixiang@localhost ~]$ top
top - 11:09:36(命令启动的时间) up 48 min(运行了48分钟), 2 users(当前有2个用户登录系统), load average: 0.00, 0.01, 0.05(系统的负载平均值,分别表示过去1分钟、5分钟、15分钟的平均负载。这些值很低,表示系统当前非常空闲。)
Tasks: 120 total(系统中共有120个进程), 1 running(当前有1个进程正在运行), 119 sleeping(有119个进程处于睡眠状态,等待某些事件发生), 0 stopped(没有进程被停止。), 0 zombie(没有僵尸进程。僵尸进程是那些已经结束但父进程尚未通过 wait() 或类似调用回收其资源的进程)
%Cpu(s): 0.0 us(用户空间占用CPU的百分比), 0.2 sy(内核空间占用CPU的百分比), 0.0 ni(改变过优先级的进程占用CPU的百分比), 99.8 id(空闲CPU百分比,非常高,表示CPU大部分时间都在空闲), 0.0 wa(等待输入输出的CPU时间百分比,这里为0,表示没有进程在等待I/O), 0.0 hi(硬件中断占用CPU的百分比), 0.0 si(软件中断占用CPU的百分比), 0.0 st(被虚拟机偷走的时间百分比(在虚拟化环境中才有意义))
KiB Mem : 13427724 total(物理内存总量,单位为KiB(千字节)), 12962956 free, 226216 used, 238552 buff/cache(用作缓冲和缓存的内存量)
KiB Swap: 2097148 total(交换空间总量), 2097148 free, 0 used. 12896220 avail Mem(估计的可用内存量,考虑了缓存和缓冲区,是系统实际可用的内存量)
查看进程:
NO.1 以树状图的形式展示所有进程的启动关系
[root@localhost ~]# pstree
systemd─┬─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─agetty
├─auditd───{auditd}
├─chronyd
├─crond
├─dbus-daemon───{dbus-daemon}
├─firewalld───{firewalld}
├─irqbalance
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───6*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd─┬─sshd───bash───pstree
│ └─sshd───sftp-server
├─systemd-journal
├─systemd-logind
├─systemd-udevd
└─tuned───4*[{tuned}]
NO.2 显示当前系统中的进程状态(经常和grep一起使用,才有灵魂)
[root@localhost ~]# ps -auxfw #w加宽f显示关系
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? S 16:41 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 16:41 0:00 \_ [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 16:41 0:00 \_ [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 16:41 0:00 \_ [migration/0]
root 8 0.0 0.0 0 0 ? S 16:41 0:00 \_ [rcu_bh]
。。。。。。(中间部分省略)
。。。。。。
postfix 9829 0.0 0.0 89716 4088 ? S 16:42 0:00 \_ qmgr -l -t unix -u
PID | 进程ID |
---|---|
%MEM | 占用的内存使用率 |
VSZ | 占用的虚拟内存大小 |
RSS | 占用的常驻内存大小 |
TTY | 执行的终端编号,直接w命令可以看到 |
STAT | 该进程的状态* |
TIME | CPU使用时间 |
必备:*STAT表示的进程状态
D: 无法中断的休眠状态 ,将一直等待事件的发生或等待某种系统资源
R: 正在执行中
S: 可中断状态
T: 暂停执行
Z: 不存在但暂时无法消除,也叫僵尸进程。每个进程在运行结束后都会处于僵死状态,等待父进程调用进而释放系统资源,处于该状态的进程已经运行结束,但是它的父进程还没有释放其系统资源
W: 没有足够的内存可分配
<: 高优先序的进程
N: 低优先序的进程
+:前台进程
l:多线程进程
s:主进程(先导进程),有子进程的进程
NO.3 动态可交互式显示进程信息
[root@localhost ~]# top -c
top - 17:17:53 up 35 min, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 106 total, 1 running, 105 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 13427724 total, 13036060 free, 211576 used, 180088 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 12941148 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 128020 6584 4164 S 0.0 0.0 0:03.75 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 [kthreadd]
3 root 20 0 0 0 0 S 0.0 0.0 0:00.13 [ksoftirqd/0]
。。。。。。
。。。。。。(中间部分省略)
97 root 20 0 0 0 0 S 0.0 0.0 0:00.01 [kauditd]
2343 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [nfit]
常用选项参数:
-d: 改变显示的更新速度,或是在交互式指令列( interactive command)按 s
-c: 切换显示模式,共有两种模式,一是只显示程序的名称,另一种是显示完整的路径与名称
-s: 安全模式,将交互式指令取消, 避免潜在的危机
-i: 不显示任何闲置 (idle) 或无用 (zombie) 的行程
-n: 更新的次数,完成后将会退出 top
-b: 显示模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到文件内
好用的命令:
ps axo pid,command,nice,cls --sort=nice (o表示自定义排序)
top -b -n 3 >> 1.txt
快捷键 | 功能 |
---|---|
空格 | 立即刷新 |
P | 根据CPU使用多少排序 |
T | 根据时间、累计排序 |
N | 以PID的大小排序 |
m | 切换显示内存信息 |
t | 切换显示进程和CPU状态信息 |
此外:
摁住 冒号 键,摁方向键也可以交互
调用进程命令:
systemctl [选项...] {命令} ...
systemctl start name.service
stop
restart
reload
status
enable
disable
kill name.service
pkill name.service
nice (-20高~19低)
[root@localhost ~]# nice -n 1 ping www.baidu.com
[root@localhost ~]# nice ping www.baidu.com
PR(新) = PR(旧) + nice
前后台
jobs #后台任务查看
命令 空格 & #任务放置后台
fg %工作号 #后台任务放置前台
bg %工作号 #后台任务恢复后台
命令放入 /etc/rc.local #开机自启文件命令
nohup 命令 #命令始终运行至前台
nohup 命令& #命令始终运行至后台 在~/nohup.out文件可查看运行
注意:nohup
任务不受到ctrl+z
的影响,必须要nohup
在fg
后才行