1、进程的定义
进程的定义: 程序是静态的代码文件 进程是指程序运行时的形态 进程是程序的一个副本 进程是有生命周期的(准备期、运行期、终止期)
进程和线程 (线程是在cpu为多核的时候提出的,单核没有线程的说法) 进程是资源调用的最小单位 线程是进程的最小单位 线程是为了缩短进程的时间
程序执行流是从上到下贯穿运行的 当进程是多任务,cpu是多核心,多任务应该同时被每个核心处理,每个核心处理的任务叫线程,线程资源是共享的。
2、进程的状态
命令 | 用户 |
---|
R(TASK——RUNNING) | 可执行态(running,ready) | S(TASK——INTRRUPTABLE) | 可唤醒状态 ,进程被cpu处理时间是有限的,超过时间就进入休眠状态 | D(TASK——UNINTRRUPTABLE) | 不可唤醒状态 | T(TASK——STOP) | 暂停状态 (认为控制,可以人为停止,认为启动) | Z(EXIT——ZOMBIE) | 僵死态 (当进程出现bug 时出现的状态,当进程结束时,如果还占用系统资源不放,就需要手动结束,,这种越多,系统崩溃越快) |
3、进程查看命令
-
进程查看命令 gnome -system-moniter ## 图形进程查看工具
ps
命令 | 用户 |
---|
a | 与终端相关的进程 (当用户登陆系统后产生的进程都是终端的) | x | 与终端无关相关的进程 | u | 用户信息归类的查看方式 | f | 进程层级关系 | o | 显示指定参数 pid comm nice pri (进程的优先级) pcpu(副极进程占用的cpu ) ppid (副极进程的Pid) stat, user ,group | -e | 显示所有进程 | -f | 显示信息的完整格式 | -H | 显示进程的层级结构 | -o | 显示指令参数 | –sort= | 表示排序 |
[root@foundation50 Desktop]# ps ax 显示所有进程
[root@foundation50 Desktop]# ps aux 用户信息的查看方式
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 245508 14228 ? Ss 08:53 0:06 /usr/lib/syst
emd/systemd --switched-root --system --deserialize 18
root 2 0.0 0.0 0 0 ? S 08:53 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 08:53 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 08:53 0:00 [rcu_par_gp]
root 6 0.0 0.0 0 0 ? I< 08:53 0:00 [kworker/0:0H
-events_highpri]
root 8 0.0 0.0 0 0 ? I< 08:53 0:00 [mm_percpu_wq
[root@foundation50 Desktop]# ps ax -o comm,%cpu,%mem,pid,ppid 显示指定参数
COMMAND %CPU %MEM PID PPID
systemd 0.0 0.1 1 0
kthreadd 0.0 0.0 2 0
rcu_gp 0.0 0.0 3 2
rcu_par_gp 0.0 0.0 4 2
kworker/0:0H-ev 0.0 0.0 6 2
mm_percpu_wq 0.0 0.0 8 2
ksoftirqd/0 0.0 0.0 9 2
rcu_sched 0.0 0.0 10 2
[root@foundation50 Desktop]# ps ax -o %cpu,comm --sort=%cpu 按照cpu正序排序
0.0 sleep
0.0 ps
0.1 sssd_kcm
0.1 chrome
0.2 pulseaudio
0.3 chrome
0.6 chrome
0.7 Xorg
1.1 gnome-shell
1.7 chrome
2.5 chrome
7.3 chrome
13.3 chrome
[root@foundation50 Desktop]# ps ax -o %cpu,comm --sort=-%cpu 按照cpu到序排序
%CPU COMMAND
8.6 chrome
4.4 chrome
2.5 chrome
1.7 chrome
1.1 gnome-shell
0.7 Xorg
0.6 chrome
0.3 chrome
0.2 pulseaudio
0.1 sssd_kcm
0.1 chrome
0.0 systemd
0.0 kthreadd
[root@foundation50 Desktop]# ps f 显示进程层级关系
PID TTY STAT TIME COMMAND
2 ? S 0:00 [kthreadd]
3 ? I< 0:00 \_ [rcu_gp]
4 ? I< 0:00 \_ [rcu_par_gp]
6 ? I< 0:00 \_ [kworker/0:0H-events_highpri]
8 ? I< 0:00 \_ [mm_percpu_wq]
9 ? S 0:00 \_ [ksoftirqd/0]
10 ? I 0:08 \_ [rcu_sched]
11 ? S 0:00 \_ [migration/0]
12 ? S 0:00 \_ [watchdog/0]
13 ? S 0:00 \_ [cpuhp/0]
14 ? S 0:00 \_ [cpuhp/1]
[root@foundation50 Desktop]# ps -H 显示进程层级关系
PID TTY TIME CMD
2804 pts/0 00:00:00 su
2810 pts/0 00:00:00 bash
2970 pts/0 00:00:00 su
2973 pts/0 00:00:00 bash
11219 pts/0 00:00:00 ps
[root@foundation50 Desktop]# ps -e 查看所有进程
ps ax 显示信息如下:
| |
---|
PID | 进程id | TTY | 进程用到的终端 | STAT | 进程状态 | TIME | 进程占用 cpu 时长 | COMMAND | 进程名称 |
ps aux 显示信息如下:
| |
---|
USER | 进程所有人 | PID | 进程id | %CPU | 进程使用cpu 的用量 | %MEM | 进程所有用到的内存用量 | RSS | 进程常驻内存中的数据大小 | VSZ | 进程使用的虚拟内存大小 | TTY | 进程用到的终端 | STAT | 进程状态 | START | 进程运行时长 | TIME | 进程占用 cpu 时长 | COMMAND | 进程名称 |
4 、pgrep 进程过滤
命令 | 功能 |
---|
-u uid | 显示指定用户进程 | -U user | 显示指定用户进程 | -t tty | 显示指定终端进程 | -l | 显示进程名称 | -a | 显示进程的完整名词 | -p | 进程的子进程 |
[root@foundation50 Desktop]$ pgrep -u 0 过滤超级用户的进程
501
502
505
506
507
3716 chrome
[root@foundation50 Desktop]$ pgrep -lU westos 显示进程名称
2904 crashpad_handle
2910 chrome
2911 chrome
2912 nacl_helper
2915 chrome
2934 chrome
2938 chrome
2946 chrome
[root@foundation50 Desktop]$ pgrep -aU westos 显示进程完整的名字
2026 /usr/libexec/at-spi2-registryd --use-gnome-session
2045 /usr/bin/gnome-shell
2055 /usr/libexec/gvfsd
[westos@foundation50 Desktop]$ pgrep -P 2709 显示子进程
2715
[root@foundation50 Desktop]# pgrep -t pts/1 显示指定终端进程
4569
4602
4608
5 、 pidof 查看命令产生进程id
命令 | 功能 |
---|
pidof (查看一个命令产生的进程id 是多少) vim | 查看vim 的pid |
[root@foundation50 Desktop]# pidof bash
4608 4569 1028
[root@foundation50 Desktop]# pidof cat
2900 2899
6、top动态进程查看
6.1、top命令的参数(外部)默认刷新频率为3秒。
命令 | 功能 |
---|
-d | 指定刷新频率 (-d 1 ,指定刷新频率为1秒。 结束用q) | -b | 以批次方式显示(-b 结束方式用ctrl +c结束, -n -b (n指定几个批次,执行完之后就自动结束) | -n | 指定显示的批次数量 -n(会自动进入到top 内部查看 ) |
[root@foundation50 Desktop]# top -d 1 一秒钟刷新一次进程
[root@foundation50 Desktop]# top -b 以批次方式显示进程
[root@foundation50 Desktop]# top -b -n 2 以2个批次方式显示
6.2 top 内部命令 (再用TOP 打开动态进程之后,然后按相应的命令即可得到相应的效果)
命令 | 功能 |
---|
P | cpu 排序 | M | 内存排序 | T | 累计占用cpu 时间排序 | l | 关闭/开启 uptime (负载 也就是第一行top )信息 | t | 关闭/开启 cpu&task 信息 | s | 指定刷新频率 | k | 操作进程 (用id 来管理进程看是关闭还是怎么样) | u | 查看指定用户进程 ( 指定用户的名称查看指定用户的进程,按u 之后如果什么都不按就会查看所有的进程) |
top 中的内容显示信息 按l 则top信息就开启,如下:
top - 20:56:31 up 25 min, 1 user, load average: 0.75, 0.53, 0.41
top - 中信息表示
09:48:51 系统时间
up 18:54 运行时长
1 users 系统中有一个用户登陆
load average : 0.75, 0.53, 0.41| 分别表示1min 5min 15min 队列长度
%Cpu(s) 内容信息,按t 则cpu信息就开启了,再次按tcpu信息就关闭了
%Cpu(s): 1.5us, 1.9 sy, 0.0 ni, 58.9 id, 0.0 wa, 2.1hi, 0.2 si, 0.0 st
#%Cpu(s)
#1.5 us 用户空间
#1.9 sy 内核空间
#0.0 ni nice 值调整时间
#58.9 id 空闲时间
#0.0 wa 等待io输出时间
#2.1 hi 处理硬件中断时间
#0.2 si 处理软件中断时间
#0.0 st 被偷走的时间(虚拟机 所用到的所有的cpu 的时间,vm使用时间)
s 指定刷新频率,默认为三秒
按s,然后输入指定刷新频率时间
Change delay from 3.0 to 1
k 操作进程 (用id 来管理进程看是关闭还是怎么样)
按k
PID to signal/kill [default pid = 4947] : 7840 (输入需要操作的进程id),回车
Send pid 7840 signal [15/sigterm] 15 (15为删除该进程)
Taxts 里面的信息
Tasks: 282 total, 3 running, 329sleeping, 0 stopped, 0 zombie
331 total 任务总量
3 running 正在运行
329 sleeping 休眠人物数量
0 stopped 被暂停数量
0 zombie 僵死人物数量
MiB Mem 里面信息内容:
MiB Mem : 11885.5 total, 8541.9 free, 1612.1 used, 1731.6 buff/cache
7664.6 total 内存总量
5383.9 free 空闲
1312.1 used 占用
968.8 buff(把内存的数据交给硬盘永久存储)/cache(从硬盘往内存里面缓存) 缓存
MiB Swap: 虚拟交换分区用量,如上
MiB Swap: 6008.0 total, 6008.0 free, 0.0 used. 9616.3 avail Mem
top 表头表示的内容
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
#PID 进程id
#USER 进程所有者的用户名
#PR 优先级
#NI nice 值。负值表示高优先级,正值表示低优先级
#VIRT 进程使用的虚拟内存总量,单位 kb 。VIRT=SWAP+RE
#RES 进程使用的、未被换出的物理内存大小,单位kb。 RES=CODE+DATA
#SHR 共享内存大小,单位kb
#S 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止 ,Z=僵尸进程)
#%CPU 上次更新到现在的CPU 时间占用百分比
#%MEM 进程使用的物理内存百分比
#TIME+ 进程使用的CPU 时间总计,单位 1/100秒
#COMMAND 命令名 /命令行
7. 进程优先级
系统是多任务多用户的操作模式 任务的重要性是有区分的 如何确定任务的重要性 “优先级” 范围: 0–139 内核自控优先级范围 :0–99 用户可控优先级:100–139 he pri的数值不一样 用nice直来调整优先级 ,nice (nice 值) (普通用户的优先级只能调低,不能调高,值越负优先级越高)) -20(对应用户可控级别的100)–19(19 对应139)这是在Linux 中的
ps ---- >pri(优先级策略) — 0- 39 (在 UNIX 中使用的优先级是从0 -39,在UNIX中值越正优先级越高。) nice -20 - 19 priority (真正 0-139 (100-139 用户可用优先级)
7.1 、更改优先级
命令 | 功能 |
---|
renice -n -5 4331 | ##更改优先级 |
[root@foundation50 Desktop]# ps ax -o comm,pri,nice | grep cat
cat 19 0
[root@foundation50 Desktop]# ps ax -o pid,comm,pri,nice | grep cat
2759 cat 19 0
[root@foundation50 Desktop]# renice -n -5 2759 更改优先级为-5 直越小优先级越高
2759 (process ID) old priority 0, new priority -5
[root@foundation50 Desktop]# ps ax -o pid,comm,pri,nice | grep cat 查看
2759 cat 24 -5
[root@foundation50 Desktop]# renice -n 5 2759
2759 (process ID) old priority -5, new priority 5
[root@foundation50 Desktop]# ps ax -o pid,comm,pri,nice | grep cat 更改优先级为5 直越大优先级越低
2759 cat 14 5
7.2 、指定优先级
命令 | 功能 |
---|
nice -n -5 cat | ## 指定优先级打开进程 |
[root@foundation50 Desktop]# ps ax -o pid,comm,pri,nice | grep cat 默认优先权限为0
2759 cat 19 0
[root@foundation50 Desktop]# nice -n -5 cat 指定权限为 -5
[root@foundation50 Desktop]# ps ax -o pid,comm,pri,nice | grep cat 查看优先级
2759 cat 19 -5
8.STAT(状态) 的显示信息
命令 | 功能 |
---|
S | sleeping | < | 优先级高 | s | 顶级进程 过滤时不要ax 就可以显示 | T | stop ctrl+z 打入后台就进入了停止 的状态。 | N | 优先级底 | R | running | + | 运行在前台 | l | 内存中有锁定空间 |
[root@foundation50 Desktop]# ps -o comm,pid,stat,nice
COMMAND PID STAT NI
bash 3628 SN 5 休眠优先级低
[root@foundation50 Desktop]# renice -n 5 3628 修改优先级
[root@foundation50 Desktop]# ps -o comm,pid,stat,nice
COMMAND PID STAT NI
bash 3628 S< -5 休眠优先级高
[root@foundation50 Desktop]# ps -o comm,pid,stat,nice
COMMAND PID STAT NI
ps 5687 R<+ -5 运行在前台优先级高
[root@foundation50 Desktop]# gedit & 后台运行
dfrgtjhydfgrdfgdhthtyjhtyjryjtyjtfhrd
[root@foundation50 Desktop]# ps -o comm,pid,stat,nice
COMMAND PID STAT NI
gedit 5773 S<l -5 内存中有锁定空间优先级高睡眠状态
9.进程前后台调用
命令 | 功能 |
---|
+ | ##把占用的shell 的进程打入后台挂起 | bg + job号 | ##把后台挂起的进程运行起来 | fg + job号 | ##把后台进程调回前台 | & | ##运行进程在后台 gedit & 在打开gedit 的时候就是在后台中运行。 | jobs | ##查看当前shell 中在后台的所有工作 |
10、进程信号 (有1-31这些信号)
命令 | 功能 |
---|
1 | #从新加载系统配置文件 (source) (游戏中的不停服更新) | 2 | #清空内存中的进程数据 | 3 | #清空内存中的鼠标(ctrl + \) | 9 | #强行结束进程 (不能被阻塞) | 15 | #正常关闭进程 (内核权衡这个进程的重要性,要是重要就会被阻塞) | 18 | #运行被暂停的进程 ( 阻塞时输入的信息,在被运行时会立即输入进程) | 19 | #暂停进程 (不会被阻塞) | 20 | #暂停进程 (会被阻塞) |
[root@foundation50 Desktop]# fshfgkghkfdghdfgk 在shell里输入内容,这些内容在内存中
[root@foundation50 Desktop]# kill -2 9104 -2 清空内存中未被锁定的进程数据
[root@foundation50 Desktop]# fshfgkghkfdghdfgk^C
[root@foundation50 Desktop]#
按ctrl + \ 鼠标弓形就会不见,动鼠标鼠标弓形就会出现
[root@foundation50 Desktop]# gedit 图形打开i文件
[root@foundation50 Desktop]# ps
PID TTY TIME CMD
9104 pts/2 00:00:00 bash
10101 pts/2 00:00:00 gedit
10113 pts/2 00:00:00 ps
[root@foundation50 Desktop]# kill -15 9104 正常关闭shell,发现无法关闭,因为gedit正在shell基础上运行,shell正在忙!!!
[root@foundation50 Desktop]# ps
PID TTY TIME CMD
9104 pts/2 00:00:00 bash 进程还在运行
10101 pts/2 00:00:00 gedit
10139 pts/2 00:00:00 ps
[root@foundation50 Desktop]# kill -9 9104 用-9强制删除
Killed
[root@foundation50 Desktop]# gedit
按ctrl + z 打入后台暂停
[1]+ Stopped gedit
[root@foundation50 Desktop]# kill -18 10573 运行被暂停的进程
[root@foundation50 Desktop]# kill -19 10819 暂停进程 (不会被阻塞)
[root@foundation50 Desktop]# kill -20 10819 暂停进程 (会被阻塞)
11、进程信号控制工具
命令 | 功能 |
---|
kill -进程信号 pid | d 只能一次结束一个 | killall -进程信号 进程名字 | 名称可以一次结束多个 | pkill -进程信号 进程条件 | -u westos 表示结束这个用户的进程,但有时候会被阻塞,可以再加上-9 |
[root@foundation50 Desktop]# ps
PID TTY TIME CMD
10813 pts/1 00:00:00 su
10819 pts/1 00:00:00 bash
10980 pts/1 00:00:00 vim
10987 pts/1 00:00:00 vim
10994 pts/1 00:00:00 vim
11001 pts/1 00:00:00 ps
[root@foundation50 Desktop]# kill -9 10980 只能结束一个
[1] Killed vim
[root@foundation50 Desktop]# killall -9 vim 名称可以一次结束多个
[2]- Killed vim
[3]+ Killed vim
[root@foundation50 Desktop]# ps
PID TTY TIME CMD
10813 pts/1 00:00:00 su
10819 pts/1 00:00:00 bash
11118 pts/1 00:00:00 ps
[root@foundation50 Desktop]# pkill -9 -u westos 指定关闭westos的进程 ,把所有westos进程关掉
Killed
Killed
Killed
12、systemd 守护进程 (管理次重要的进程,受内核控管,相当于内核的帮手)
pstree可以看到守护进程的情况 systemd守护进程的管理工具systemctl systemctl命令的用法:
命令 | 功能 |
---|
start | ## 开启 | stop | ## 关闭 | status | ## 查看状态 | reload | ## 重新加载 (不是所有的服务都支持) | restart | ## 重新启动服务 | enable | ## 设定服务开机启动 (不会影响当前的状态,当再次开启时会变化) | enable --now | ## 设定服务开机启动并且当前开启服务 | disable | ## 设定服务开启不启动 (不会影响当前的状态,当再次开启时会变化) | disable --now | ## 设定服务开机不启动并且当前开启服务 | list-units | ## 查看系统所有服务当前状态 | list-unit-files | ## 查看服务开机状态 | list-dependencies | ## 列出服务依赖性 | mask | ## 冻结服务 | unmask | ## 解锁 |
[root@foundation50 Desktop]# systemctl status sshd 查看sshd服务状态
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset>
Active: active (running) since Tue 2021-08-24 21:57:12 CST; 54s ago 处于运行状态
Docs: man:sshd(8)
[root@foundation50 Desktop]# systemctl stop sshd 关闭sshd服务
[root@foundation50 Desktop]# systemctl status sshd 查看状态
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset>
Active: inactive (dead) since Tue 2021-08-24 21:59:18 CST; 5s ago 处于关闭状态
[root@foundation50 Desktop]# systemctl start sshd 开启sshd服务
[root@foundation50 Desktop]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset>
Active: active (running) since Tue 2021-08-24 22:01:00 CST; 4s ago 处于开启状态,这些都是开机后的状态,若关机再开机服务是什么状态,取决于开机自启服务是开启还是关闭
[root@foundation50 Desktop]# systemctl enable sshd 设定服务开机启动
[root@foundation50 Desktop]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset> 出现enable,不会影响当前的状态,当再次开启时会变化
Active: active (running) since Tue 2021-08-24 22:01:00 CST; 5min ago
[root@foundation50 Desktop]# systemctl enable --now sshd 设定服务开机启动并且当前开启服务
[root@foundation50 Desktop]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset> enable 出现 ,并且当前服务也会开启
Active: active (running) since Tue 2021-08-24 22:01:00 CST; 11min ago
[root@foundation50 Desktop]# systemctl disable sshd.service 设定服务开机不启动
Removed /etc/systemd/system/multi-user.target.wants/sshd.service.
[root@foundation50 Desktop]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; vendor prese> 出现disabled,不会影响当前状态,当再次开启时会变化
Active: active (running) since Tue 2021-08-24 22:01:00 CST; 13min ago
[root@foundation50 Desktop]# systemctl disable --now sshd 设定服务开机不启动并且当前关闭服务
[root@foundation50 Desktop]# systemctl sta
start status
[root@foundation50 Desktop]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; vendor prese> disabled出现,并且服务关闭
Active: inactive (dead)
[root@foundation50 Desktop]# systemctl mask sshd 冻结sshd服务
Created symlink /etc/systemd/system/sshd.service → /dev/null.
[root@foundation50 Desktop]# systemctl stop sshd
[root@foundation50 Desktop]# systemctl start sshd
Failed to start sshd.service: Unit sshd.service is masked. sshd服务不能被开启
[root@foundation50 Desktop]# systemctl unmask sshd.service 解锁sshd服务
Removed /etc/systemd/system/sshd.service.
[root@foundation50 Desktop]# systemctl start sshd 开启sshd服务
[root@foundation50 Desktop]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; vendor prese> 服务开启
Active: active (running) since Tue 2021-08-24 22:24:02 CST; 8s ago
[root@foundation50 Desktop]# systemctl list-units 查看系统所有服务当前状态
UNIT LOAD ACTIVE SUB DESCRIPTION
proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary Executabl>
sys-devices-pci0000:00-0000:00:02.0-drm-card0-card0\x2deDP\x2d1-intel_backlig>
sys-devices-pci0000:00-0000:00:03.0-sound-card0.device loaded active plugged >
sys-devices-pci0000:00-0000:00:1b.0-sound-card1.device loaded active plugged >
sys-devices-pci0000:00-0000:00:1c.2-0000:03:00.0-net-wlp3s0f0.device loaded a>
[root@foundation50 Desktop]# systemctl list-unit-files 查看服务开机状态
UNIT FILE STATE
proc-sys-fs-binfmt_misc.automount static
-.mount generated
boot-efi.mount generated
boot.mount generated
dev-hugepages.mount static
dev-mqueue.mount static
proc-fs-nfsd.mount static
proc-sys-fs-binfmt_misc.mount static
sys-fs-fuse-connections.mount static
[root@foundation50 Desktop]# systemctl list-dependencies 列出服务依赖性
default.target default.target 为sshd服务的依赖性
● ├─accounts-daemon.service
● ├─gdm.service
● ├─rtkit-daemon.service
● ├─systemd-update-utmp-runlevel.service
● ├─udisks2.service
13、设定系统运行模式set-default
命令 | 功能 |
---|
systemctl set-default multi-user.target | 无图形网络模式 , 运行后reboot,就为无图形界面,若要恢复图形则startx这种方式运行级别不会发生改变,而用init5后运行级别会发生改变 运行级别用runlever查看 init5 是在3的基础上开了个5 | systemctl set-default graphical.target | 有图形的网络模式 |
get-default ## 查看系统运行模式
系统运行模式可以用 runlevel查看运行级别 # 0-6 # 0 POWEROFF # 1 single (改密码) # 2 noG+NETWORK # 3 (2-4 是无图形的网络模式) # 4 # 5 G+NETWORK (有图形的网络模式) # 6 REBOOT
|