进程和计划任务管理

本文详细介绍了Linux系统中的程序与进程的关系,包括进程的特性、状态、分类及管理命令,如ps、top、pgrep等。此外,还讨论了进程的启动方式,包括前台、后台执行以及进程结束的方法。最后,重点讲解了计划任务管理,包括一次性任务的at命令和周期性任务的crontab设置,帮助用户更好地管理和调度系统资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、程序和进程的关系

1、程序

2、进程

2.1 进程概述

2.2 进程具有的特征

2.3 进程结束有两种情况

2.4 进程使用内存的问题

2.5 进程状态

2.6  进程之间通讯

2.7 进程的优先级 os

2.8 进程分类

2.9 僵尸进程

三、进程管理相关命令

1、ps命令 查看当前终端运行的进程

2、top 查看动态的进程排名信息

3、pgrep 根据特定条件查询进程PID信息

4、pstree 以树形结构列出进程信息  

5、losf 列出打开的文件

6、iostat 显示所有设备负载情况

7、vmstat 监控系统资源

四、五大系统资源

五、进程的启动方式

1、手工启动

1.1 "命令 &",把命令放入后台执行

1.2 查看后台任务列表 jobs 

1.3 调出后台任务 fg +序号

2、结束进程

2.1 kill是给一个程序发出信号

2.2 pkill 根据特定条件终止相应的进程(不建议使用)

六、计划任务管理

1、at 一次性计划任务

1.1 建立at任务

1.2 atq 查看at任务

1.3 atrm 删除a任务

2、使用crontab命令(分时日月周),设置周期性计划任务

2.1 管理crontab计划任务

2.2 应用示例


一、程序和进程的关系

1、程序

  • 保存在硬盘、光盘等介质中的可执行代码和数据
  • 静态保存的代码

2、进程

  • CPU及内存中运行的程序代码
  • 动态执行的代码
  • 父、子进程(每个程序可以创建一个或多个进程)

2.1 进程概述

运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位

  • 进程ID(Process ID,PID)号码被用来标记各个进程
  • UID、GID、和SELinux语境决定对文件系统的存取和访问权限
  • 通常从执行进程的用户来继承
  • 存在生命周期
  • 都由其父进程创建,可以有一个或多个子进程

进程创建:

  • init:第一个进程,从centos7以后是systemd
  • 进程:都由其父进程创建,fork(),父子关系,CoW:Copy On Write

2.2 进程具有的特征

  • 动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
  • 并发性:任何进程都可以同其他进程一起并发执行;
  • 独立性:进程是系统进行资源分配和调度的一个独立单位;
  • 结构性:进程由程序、数据和进程控制块三部分组成。

线程的出现是为了解决切换进程之间出现的硬件消耗

没有线程只有进程会过度消耗硬件资源

一个线程至少有一个进程

线程会共享进程中的资源

问:如何确定一个程序是多线程还是单线程?

总结:查看是多线程还是单线程的命令如下

  1. pstree
  2. cat /proc/pid号/status

2.3 进程结束有两种情况

进程结束有两种情况正常结束和非正常结束

非正常结束会造成一节结果:如死机,僵尸进程等,对于系统而言,会占用内存,对于内存是一个很大的负担,一般解决方法是重启或杀死进程

2.4 进程使用内存的问题

(1)内存泄漏:Memory Leak(一个程序开启了一个进程,这个进程不正常关闭,发生了问题,os一直在运行,os收不回这块内存,这块内存就一直处于 占用状态)

指程序中用malloc或new申请了一块内存,但是没有用free或delete将内存释放,导致这块内存一直处于占用状态

(2)内存溢出:Memory Overflow

指程序申请了10M的空间,但是在这个空间写入10M以上字节的数据,就是溢出

(3)内存不足:OOM

在java程序中比较常见,在日志messages中会看到Out Of MemoryError: Java heap space

原因:

给应用分配内存太少:比如虚拟机本身可使用的内存(一般通过启动时的VM参数指定)太少。

应用用的太多,并且用完没释放,浪费了。此时就会造成内存泄露或者内存溢出。

使用的解决办法:

  1. 限制java进程的max heap,并且降低java程序的worker数量,从而降低内存使用
  2. 给系统增加swap空间

2.5 进程状态

(1)进程的基本状态

- 创建状态:进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写
- 控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调
- 度运行,把此时进程所处状态称为创建状态
- 就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行
- 执行状态:进程处于就绪状态被调度后,进程进入执行状态
- 阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受
- 到阻塞。在满足请求时进入就绪状态等待系统调用
- 终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行

(2)状态之间转换六种情况

运行——>就绪:

  1. 主要是进程占用CPU的时间过长,而系统分配给该进程占用CPU的时间是有限的;
  2. 在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出CPU,该进程便由执行状态转变为就绪状态
  • 就绪——>运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU
  • 运行——>阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,如
  • 发生了I/O请求
  • 阻塞——>就绪:进程所等待的事件已经发生,就进入就绪队列

以下两种状态是不可能发生的:

  • 阻塞——>运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调度时不会从阻塞队列进行挑选,而是从就绪队列中选取
  • 就绪——>阻塞:就绪态根本就没有执行,谈不上进入阻塞态

(3)进程更多的状态

- 运行态:running
- 就绪态:ready
- 睡眠态:分为两种,可中断:interruptable,不可中断:uninterruptable
- 停止态:stopped,暂停于内存,但不会被调度,除非手动启动
- 僵死态:zombie,僵尸态,结束进程,父进程结束前,子进程不关闭,杀死父进程可以关闭僵死态 的子进程

2.6  进程之间通讯

同一主机:

pipe 管道,单向传输
socket   套接字文件,双工通信
Memory-maped file   文件映射,将文件中的一段数据映射到物理内存,多个进程共享这片内存
shm shared memory 共享内存
signal 信号
Lock   对资源上锁,如果资源已被某进程锁住,则其它进程想修改甚至读取这些资源,都将被阻塞,直到锁被打开
semaphore 信号量,一种计数器

不同主机:socket=IP和端口号

RPC remote procedure call   远程调用
MQ 消息队列,生产者和消费者,如:Kafka,RabbitMQ,ActiveMQ

2.7 进程的优先级 os

进程优先级调整

- 静态优先级:100-139
- 进程默认启动时的nice值为0,优先级为120
- 只有根用户才能降低nice值(提高优先性)

2.8 进程分类

操作系统分类:

- 协作式多任务:早期 windows 系统使用,即一个任务得到了 CPU 时间,除非它自己放弃使用CPU ,否则将完全霸占 CPU ,所以任务之间需要协作——使用一段时间的 CPU ,主动放弃使用
- 抢占式多任务:Linux内核,CPU的总控制权在操作系统手中,操作系统会轮流询问每一个任务是否需要使用 CPU ,需要使用的话就让它用,不过在一定时间后,操作系统会剥夺当前任务的 CPU 使用权,把它排在询问队列的最后,再去询问下一个任务

进程类型:

- 守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程
- 前台进程:跟终端相关,通过终端启动的进程

注意:两者可相互转化

按进程资源使用的分类:

- CPU-Bound:CPU 密集型,非交互
- IO-Bound:IO 密集型,交互

2.9 僵尸进程

进程结束,父进程会回收子进程的硬件资源,子进程出现意外关闭,父进程无感知就不会收回资源,这个人为关闭父进程,资源不会回收产生僵尸进程。

人为模拟:

 解决方法: 重启或将父进程唤起

三、进程管理相关命令

进程的管理主要是指进程的关闭与重启。我们一般关闭或重启软件,都是关闭或重启它的程序,而不是直接操作进程的。比如,要重启 apache 服务,一般使用命令"service httpd restart"重启 apache的程序。systemctl httpd start

那么,可以通过直接管理进程来关闭或重启 apache 吗?答案是肯定的,这时就要依赖进程的信号(Signal)了。我们需要给予该进程 信号,告诉进程我们想要让它做什么。

系统中可以识别的信号较多,我们可以使用命令"kill -l"或"man 7 signal"来查询

号代号信号名称说 明
1SIGHUP该信号让进程立即关闭.然后重新读取配置文件之后重启
2SIGINT程序中止信号,用于中止前台进程。相当于输出 Ctrl+C 快捷键
3SIGQUIT退出
8SIGFPE在发生致命的算术运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为 0 等其他所有的算术运算错误
9SIGKILL用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。般用于强制中止进程
14SIGALRM时钟定时信号,计算的是实际的时间或时钟时间。alarm 函数使用该信号
15SIGTERM正常结束进程的信号,kill 命令的默认信号。如果进程已经发生了问题,那么这 个信号是无法正常中止进程的,这时我们才会尝试 SIGKILL 信号,也就是信号 9
18SIGCONT该信号可以让暂停的进程恢复执行。本信号不能被阻断
19SIGSTOP该信号可以暂停前台进程,相当于输入 Ctrl+Z 快捷键。本信号不能被阻断

1、ps命令 查看当前终端运行的进程

格式 ps [options]

ps命令可以查看进程当前状态的快照,默认显示当前终端中的进程,Linux系统各进程的相关信息均保存在/proc/数字 目录/status 下的各文件中

ps选项及功能
选项功能
a显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将示系统中所有的进程信息。(所有终端的进程)
u使用以用户为主的格式输出进程信息。(用户信息显示)
x

显示当前用户在所有终端下的进程信息。(更详细)

-e显示系统内的所有进程信息。
-l使用长(Long)格式显示进程信息。
-f使用完整的(Full)格式显示进程信
k|--sort对属性排序,属性前加 - 表示倒序
o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem

查看静态的进程统计信息

- "ps aux" 可以查看系统中所有的进程;
- "ps -le" 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;
- "ps -l" 只能看到当前 Shell 产生的进程;

举例:

ps aux 可以查看系统中所有的进程;

表头含义
USER该进程是由哪个用户产生的。
PID进程的 ID。
%CPU该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源。
%MEM该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源。
VSZ该进程占用虚拟内存的大小,单位为 KB。
RSS该进程占用实际物理内存的大小,单位为 KB。
TTY该进程是在哪个终端运行的。其中,tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端,tty7 是图形终端。pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长。
STAT

进程状态。常见的状态有以下几种:

-D:不可被唤醒的睡眠状态,通常用于 I/O 情况。

-R:该进程正在运行。

-S:该进程处于睡眠状态,可被唤醒。

-T:停止状态,可能是在后台暂停或进程处于除错状态。

-W:内存交互状态(从 2.6 内核开始无效)。

-X:死掉的进程(应该不会出现)。

-Z:僵尸进程。进程已经中止,但是还是占用硬件资源。

-<:高优先级(以下状态在 BSD 格式中出现)。

-N:低优先级。

-L:被锁入内存。

-s:包含子进程。

-l:多线程(小写 L)。

-+:位于后台。

START该进程的启动时间。
TIME该进程占用 CPU 的运算时间,注意不是系统时间。
COMMAND产生此进程的命令名。

 ps -le 命令输出信息

表头含义
F进程标志,说明进程的权限,常见的标志有两个: 1:进程可以被复制,但是不能被执行;4:进程使用超级用户权限;
S进程状态。具体的状态和"psaux"命令中的 STAT 状态一致;
UID运行此进程的用户的 ID;
PID进程的 ID;
PPID父进程的 ID;
C该进程的 CPU 使用率,单位是百分比;
PRI进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;系统定义不可以人为修改
NI进程的优先级,数值越小,该进程越早被执行;可以人为修改
ADDR该进程在内存的哪个位置;
SZ该进程占用多大内存;
WCHAN该进程是否运行。"-"代表正在运行;
TTY该进程由哪个终端产生;
TIME该进程占用 CPU 的运算时间,注意不是系统时间;
CMD产生此进程的命令名;

在 Linux 系统中,表示进程优先级的有两个参数:Priority 和 Nice

其中,PRI 代表 Priority,NI 代表 Nice。这两个值都表示优先级,数值越小代表该进程越优先被 CPU 处理。不过,PRI值是由内核动态调整的,用户不能直接修改。所以我们只能通过修改 NI 值来影响 PRI 值,间接地调整进程优先级。

PRI 和 NI 的关系如下:PRI (最终值) = PRI (原始值) + NI

修改 NI 的值就可以改变进程的优先级即可。NI 值越小,进程的 PRI 就会降低,该进程就越优先被 CPU 处理;反之,NI 值越大,进程的 PRI 值就会増加,该进程就越靠后被 CPU 处理。

修改 NI 值时有几个注意事项:

- NI 范围是 -20~19
- 普通用户调整 NI 值的范围是 0~19,而且只能调整自己的进程。
- 普通用户只能调高 NI 值,而不能降低。如原本 NI 值为 0,则只能调整为大于 0。
- 只有 root 用户才能设定进程 NI 值为负值,而且可以调整任何用户的进程。

a:显示当前终端下的所有进程信息;u:使用以用户为主的格式输出进程信息

ps -o pid 只看pid

 ps -o pid,%cpu  指定查看pid和cpu使用率

 找到未知进程的执行程序文件路径(2322为例)

 2、top 查看动态的进程排名信息

  • 相当于windows中的任务管理器
  • top 命令的输出内容是动态的,默认每隔 3 秒刷新一次。
top选项及功能
选项功能
-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 命令;

第一部分显示整个系统的资源使用状况解析:第一行为任务队列信息

第一部分显示整个系统的资源使用状况解析:第二行为进程信息 

 第一部分显示整个系统的资源使用状况解析:第三行为CPU信息 

第一部分显示整个系统的资源使用状况解析:第四行为物理内存信息 

 第一部分显示整个系统的资源使用状况解析:第五行为物理内存信息  

  第二部分显示系统中进程信息解析

 3、pgrep 根据特定条件查询进程PID信息

pgrep选项及功能
选项功能
-U指定用户
-l显示进程名
-a显示完整格式的进程名
-P pid

显示指定进程的子进程​​​​

举例:

​​​​​​​

4、pstree 以树形结构列出进程信息  

pstree选项及功能
选项功能
-a显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
-p显示PID
-T-不显示线程thread,默认显示线程
-u显示用户切换
-H pid高亮显示指定进程及其前辈进程

举例:

 

5、losf 列出打开的文件

格式:lsof [选项]

losf选项及功能
选项功能
-c 字符串只列出以字符串开头的进程打开的文件。
+d 目录名列出某个目录中所有被进程调用的文件。
-u 用户名只列出某个用户的进程打开的文件。
-p pid列出某个 PID 进程打开的文件。

举例:

6、iostat 显示所有设备负载情况

格式:​​​​​​​iostat [ 选项 ] [ <时间间隔> [ <次数> ] ]

iostat选项及功能
选项功能
-c显示CPU使用情况
-d显示磁盘使用情况
-N显示磁盘阵列(LVM) 信息
-n显示NFS 使用情况
-k以 KB 为单位显示
-m以 M 为单位显示
-t报告每秒向终端读取和写入的字符数和CPU的信息
-V显示版本信息
-x显示详细信息
-p显示磁盘和分区的情况

举例:

显示所有设备负载情况

​​​​​​​间隔1秒,总共显示5次

 每隔2秒,显示一次设备统计信息.总共输出3次.

7、vmstat 监控系统资源

格式:vmstat [options] [delay [count]]

vmstat选项及功能
选项含义
-fs-f:显示从启动到目前为止,系统复制(fork)的程序数,此信息是从 /proc/stat 中的 processes 字段中取得的。 -s:将从启动到目前为止,由一些事件导致的内存变化情况列表说明。
-S 单位令输出的数据显示单位,例如用 K/M 取代 bytes 的容量。
-d列出硬盘有关读写总量的统计表。
-p 分区设备文件名查看硬盘分区的读写情况。
vmstat解释
字段含义
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:每秒进行的事件切换次数。这两个数越大,代表系统与接口设备的通信越繁忙。
cpuCPU信息字段: -us:非内核进程消耗 CPU 运算时间的百分比。 -sy:内核进程消耗 CPU 运算时间的百分比。 -id:空闲 CPU 的百分比。 -wa:等待 I/O 所消耗的 CPU 百分比。 -st:被虚拟机所盗用的 CPU 百分比

四、五大系统资源

  1. CPU利用率 : top    ; ps  aux    ;  
  2. 内存利用率: free    ;
  3. 磁盘利用率: df      ;
  4. 磁盘io (读写): dd     ;   vmstat     ;  iostat
  5. 带宽(网络资源):与光纤有关

五、进程的启动方式

1、手工启动

  • 前台启动:通过终端启动,且启动后一直占据终端(串行执行)
  • 后台启动:可通过终端启动,但启动后即转入后台运行(释放终端)(并行执行)

1.1 "命令 &",把命令放入后台执行

让作业运行于后台

  • 运行中的作业: Ctrl+z
  • 尚未启动的作业: COMMAND &

第一种把命令放入后台的方法是在命令后面加入 空格 &。使用这种方法放入后台的命令,在后台处于执行状态。

注意,放入后台执行的命令不能与前台有交互,否则这个命令是不能在后台执行的​​​​​​​

前台命令占用终端 

加了& 将前台转为后台执行

ctrl + z将它放入后台并停止

1.2 查看后台任务列表 jobs 

1.3 调出后台任务 fg +序号

2、结束进程

(1)ctrl +c 组合键

  • 终端正在执行的命令

(2)kill、killall命令

  • kill用于终止指定PID号的进程
  • killall用于终止指定名称的所有进程
  • -9 选项用于强制终止

2.1 kill是给一个程序发出信号

格式:kill [信号] PID

kill后面不加相当于kill 0

kill信号及信号含义
信号编号信号名含义
0EXIT程序退出时收到该信息。
1HUP挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。
2INT表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号。
3QUIT退出。
9KILL杀死进程,即强制结束进程。
11SEGV段错误。
15TERM正常结束进程,是 kill 命令的默认信号。

2.2 pkill 根据特定条件终止相应的进程(不建议使用)

格式:pkill [信号] 进程名

pkill选项及功能
选项功能
-U根据进程所属的用户名终止相应进程
-t根据进程所在的终端终止相应进程
-u uideffective user,生效者
-U uidreal user,真正发起运行命令者
-t terminal与指定终端相关的进程
-l显示进程名(pgrep可用)
-a显示完整格式的进程名(pgrep可用)
-P pid显示指定进程的子进程

六、计划任务管理

1、at 一次性计划任务

1.1 建立at任务

 1.2 atq 查看at任务

1.3 atrm 删除a任务

2、使用crontab命令(分时日月周),设置周期性计划任务

  • 按照预先设置的时间周期(分钟、小时、天、月、周)重复执行指定的命令操作
  • 属于周期性计划任务

主要设置文件:

  • 全局配置文件,位于文件: /etc/crontab
  • 系统默认的设置,位于目录: /etc/cron.*/
  • 用户定义的设置,位于文件: /var/spool/cron/用户名
crontab选项及功能
选项功能
-u user用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo 用户的 crontab 服务,此选项一般有 root 用户来运行。
-e编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。
-l显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。
-r从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。
-i在删除用户的 crontab 文件时,给确认提示。

项目含义范围
第一个"*"一小时当中的第几分钟(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 分钟就执行一次命令。

2.1 管理crontab计划任务

  • 编辑计划任务:crontab -e [-u 用户名]
  • 查看计划任务:crontab -l [-u 用户名]
  • 删除计划任务:crontab -r [-u 用户名]

 2.2 应用示例

每月1号下午14点到18点,每1小时执行一次

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值