进程管理 ps top isof kill

一、进程概述

1、程序和进程

(1)程序:保存在硬盘等介质中的可执行的二进制文件,静态的/usr/bin/passwd ,/usr/sbin/useradd,本质就是不运行的文件。
(2)进程:是程序运行的过程中产生,动态的,有生命周期的运行状态,是一个运行着的、要占用系统运行资源的程序。在CPU及内存中运行的程序代码,动态执行的代码。一个程序可以由多个进程共用

进程是已启动的可执行程序的运行实例,进程有以下组成部分:
• 已分配内存的地址空间;
• 安全属性,包括所有权凭据和特权;
• 程序代码的一个或多个执行线程;
• 进程状态。

系统给每一个进程都分配了一个唯一的进程标识符(称PID)


2、进程的生命周期


在这里插入图片描述

父进程复制自己的地址空间(fork)创建一个新的(子)进程结构。
每个新进程分配一个,唯一的进程 ID (PID),满足跟踪安全性之需。
任何进程都可以创建子进程。
PID 和 PPID(父进程 ID) 是子进程环境的元素,任何进程都可以创建子进程,所有进程都是第一个系统进程的后代。

所有进程都是第一个系统进程的后代:
Centos5/6系统进程(PID 1): init
Centos7系统进程(PID 1): systemd


父进程与子进程:
(1)子进程是由一个进程所产生的进程,产生这个子进程的进程叫做父进程。
(2)使用系统调用fork创建进程。fork复制的内容包括父进程的数据和堆栈段以及父进程的进程环境。
(3)父进程终止,那么子进程也随之自然终止。
(4)呈树状结构,初始化进程是根节点,其他的进程均有父进程。


3、进程分类

(1)前台进程:
在shell提示处输入命令后,创建一个子进程,运行命令,shell等待命令退出,然后返回到对用户提示符。即在前台运行,用户在它完成之前不能执行另一个命令。

(2)后台进程:
在shell提示处输入命令,如果后面跟着一个“&”符号,shell创建的子进程运行此命令,但不等待命令退出,而直接返回到对用户给出提示符。并且这条命令与shell同步运行,即在后台运行,后台进程必然是非交互式的。

(3)批处理进程:一个进程序列
(4)守护进程:又称为监控进程,是指那些在后台运行,并且没有控制终端的进程。

4、进程状态

在多任务处理操作系统中,每个CPU在一个时间点上只能处理一个进程。
在进程运行时,它对CPU 时间和资源分配的要求会不断变化,
从而为进程分配一个状态,它随着环境要求而改变。

在这里插入图片描述

运行R(Running):正在运行或在运行队列中等待。
睡眠S(Sleeping):休眠中, idle 状态, 在等待某个条件的形成或接受到信号。
僵死Z(Zommbie):进程已终止, 但父进程无法正常终止它。
停止T(Stopped):停止状态,不会在被调用到cpu上运行。

在这里插入图片描述


二、静态查看进程 ps

ps 直译为Process Status,用来显示系统中当前运行的进程的快照,故 ps 只提供了进程的一次性查看。


常用格式ps aux ; ps -elf
选项说明:

命令参数含义
a显示跟当前终端关联的所有进程
u基于用户的格式显示,用户名和启动时间,不以终端来区分
x显示所有进程
c显示每个程序真正的指令名称,而不包含路径,参数或常驻服务
e显示每个程序所使用的环境变量
-l详细显示进程信息,长格式显示

案例一:显示所有进程 ps aux | more

[root@centos7 ~]#ps aux | more
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1 194196  7368 ?        Ss   09:23   0:09 /usr/lib/systemd/systemd --switched
-root --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S    09:23   0:00 [kthreadd]
root          4  0.0  0.0      0     0 ?        S<   09:23   0:00 [kworker/0:0H]
root          6  0.0  0.0      0     0 ?        S    09:23   0:00 [ksoftirqd/0]
root          7  0.0  0.0      0     0 ?        S    09:23   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S    09:23   0:00 [rcu_bh]
root          9  0.0  0.0      0     0 ?        S    09:23   0:08 [rcu_sched]
root         10  0.0  0.0      0     0 ?        S<   09:23   0:00 [lru-add-drain]
root         11  0.0  0.0      0     0 ?        S    09:23   0:00 [watchdog/0]
root         12  0.0  0.0      0     0 ?        S    09:23   0:00 [watchdog/1]

列注释:
1、USER:运行进程的用户
2、PID:该进程的ID
3、%CPU:进程的CPU占用率
4、%MEM:进程的内存占用率
5、VSZ:该进程使用掉的虚拟内存大小KB
6、RSS:该进程占用的实际的内存大小KB
7、TTY:该进程在哪个终端上运行,若与终端己无关,则显示“?”。
8、STAT:该程序的状态,主要状态有
              R(正在运行):进程正在运行,或者被运行
              S(睡眠):该进程目前正在睡眠中,可被某些信息唤醒。
              T(停止):该进程目前正在侦测或者停止了
              Z(僵死):该进程应该已终止,但父进程却无法正常的终止他,造成僵尸进程的状态。
              D:不可中断
9、START:该进程被触发启动的时间
10、TIME:该进程实际使用CPU运作的时间
11、COMMAND:该进程的实际指令


最后一列,使用括[ ]起来的进程是内核态进程,没有括起来的是用户态进程

案例二:对进程的指定列排序 ps aux --sort

1)对CPU进行降序排列: –sort -%cpu 从高到低
减号是降序

[root@centos7 ~]#ps -aux --sort -%cpu | more
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      18343  0.9  0.7 735896 27116 ?        Sl   16:58   0:00 /usr/libexec/gnome-terminal-server
root        745  0.2  0.1 295376  5192 ?        Ssl  09:24   1:09 /usr/bin/vmtoolsd
root       2420  0.2  0.6 608716 25696 ?        Sl   09:25   1:02 /usr/bin/vmtoolsd -n vmusr
root        350  0.1  0.0      0     0 ?        S    09:24   0:29 [xfsaild/sda2]
root       2118  0.1  4.8 3604380 186244 ?      Sl   09:24   0:51 /usr/bin/gnome-shell
root      10186  0.1  5.9 2989664 231500 ?      Sl   09:56   0:43 /usr/lib64/firefox/firefox
root      16130  0.1  0.0      0     0 ?        S    13:22   0:18 [kworker/2:2]
root      18316  0.1  0.0      0     0 ?        S    16:55   0:00 [kworker/3:1]
root      18350  0.1  0.0 116960  3508 pts/0    Ss   16:58   0:00 bash
root      18365  0.1  0.1 350492  6764 ?        Sl   16:58   0:00 /usr/sbin/abrt-dbus -t133
root      18403  0.1  0.1 149264  5004 pts/0    S+   16:58   0:00 vim 1.text

2)对CPU进行升序排列: –sort %cpu 从低到高

[root@centos7 ~]#ps -aux --sort %cpu | more
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1 194196  7368 ?        Ss   09:23   0:09 /usr/lib/systemd/systemd --switched
-root --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S    09:23   0:00 [kthreadd]
root          4  0.0  0.0      0     0 ?        S<   09:23   0:00 [kworker/0:0H]

案例三:进程的父子关系 ps -elf

[root@centos7 ~]#ps -elf | head -10
F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root          1      0  0  80   0 - 48549 ep_pol 09:23 ?        00:00:09 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
1 S root          2      0  0  80   0 -     0 kthrea 09:23 ?        00:00:00 [kthreadd]
1 S root          4      2  0  60 -20 -     0 worker 09:23 ?        00:00:00 [kworker/0:0H]
1 S root          6      2  0  80   0 -     0 smpboo 09:23 ?        00:00:00 [ksoftirqd/0]
1 S root          7      2  0 -40   - -     0 smpboo 09:23 ?        00:00:00 [migration/0]
1 S root          8      2  0  80   0 -     0 rcu_gp 09:23 ?        00:00:00 [rcu_bh]
1 S root          9      2  0  80   0 -     0 rcu_gp 09:23 ?        00:00:08 [rcu_sched]
1 S root         10      2  0  60 -20 -     0 rescue 09:23 ?        00:00:00 [lru-add-drain]
5 S root         11      2  0 -40   - -     0 smpboo 09:23 ?        00:00:00 [watchdog/0]

列注释:
1、F:代表这个程序的旗标(flag),其中“4”代表使用者为super user。
2、S:代表这个程序的状态(STAT),与ps aux的STAT状态一致
3、UID:该进程的程序用户。
4、PID:该进程的进程号。
5、PPID父进程的进程号
6、C:CPU使用的资源百分比
7、PRI:priority的缩写,优先执行权,值越小越早被执行
8、NI:Nice值,表示进程可被执行的优先级的修正数值。
9、ADDR:内核函数,指出该进程在内存的那个部分,如果是running的进程,一般显示“-”
10、SZ:该进程使用掉的内存大小。
11、WCHAN:该进程是否正在运行状态。
12、TTY:该进程的终端机位置。
13、TIME:使用掉的CPU时间。
14、CMD:该进程的指令。


注意:ps是显示瞬间进程的状态,并不动态连续;如果想对进程进行实时监控应该用top命令。

案例四:自定义显示字段

[root@centos7 ~]#ps axo user,pid,ppid,%mem,command |head -5
USER        PID   PPID %MEM COMMAND
root          1      0  0.1 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0  0.0 [kthreadd]
root          4      2  0.0 [kworker/0:0H]
root          6      2  0.0 [ksoftirqd/0]

三、动态查看进程 top

top用于动态监测进程和系统相关属性信息,查看系统资源使用情况以及进程排名信息,默认3秒刷新一次。

[root@centos7 ~]#top

top - 17:43:30 up  8:19,  3 users,  load average: 0.00, 0.01, 0.05
Tasks: 245 total,   1 running, 244 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.8 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3861292 total,  1534436 free,  1135568 used,  1191288 buff/cache
KiB Swap:     4092 total,     4092 free,        0 used.  2442492 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                        
   350 root      20   0       0      0      0 S   0.3  0.0   0:31.64 xfsaild/sda2                                   
   745 root      20   0  295376   5192   3952 S   0.3  0.1   1:15.23 vmtoolsd                                       
 18857 root      20   0  162220   2380   1572 R   0.3  0.1   0:00.41 top                                            
     1 root      20   0  194196   7368   4260 S   0.0  0.2   0:09.53 systemd                                        
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.07 kthreadd                                       
     4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H                                   
     6 root      20   0       0      0      0 S   0.0  0.0   0:00.86 ksoftirqd/0                                    

上半部分:
在这里插入图片描述


下半部分:列说明

PID:进程id
USER:进程所有者的用户名。
PR:优先级(由内核动态调整),用户不能修改
NI进程优先级。 nice值。负值表示高优先级,正值表示低优先级,用户可以自己调整。
VIRT(virtual memory usage):虚拟内存,是进程正在使用的所有内存(ps 中标为 VSZ)
RES(resident memory usage):是进程所使用的物理内存。实际使用内存(ps 中标为 RSS)
SHR(shared memory):共享内存大小,单位kb。除 M自身进程的共享内存,也包括其他进程的共享内存
S:进程状态。

        D=不可中断的睡眠状态
        R=运行中或可运行
        S=睡眠中
        T=已停止
        Z=僵死

%CPU: CPU 时间占用百分比
%MEM:进程使用的物理内存百分比
TIME+:进程使用的 CPU 时间总计,单位 1/100 秒
COMMAND:命令名/命令行

Idle 是空闲的,意思还有多少可以用。

1、命令参数、快捷键


命令参数

命令参数含义
-d秒数 指定每隔几秒更新
-i不显示任何闲置或僵死进程
-p通过指定监控进程ID来监控某个进程的状态

快捷键

快捷键含义
P以CPU使用率排序(默认)
M以内存使用率排序
N以PID排序
z彩色
Z彩色,使用数字调整,0黑,1红,2绿,3黄,4蓝
u查看某个用户进程,进而结束进程

还有很多,可以在帮助(man)中查找。

案例一:指定PID,指定时间间隔

[root@centos7 ~]#top                   #回车,立刻刷新
[root@centos7 ~]#top -d 1              #每秒刷新
[root@centos7 ~]#top -d 1  -p 20817    #每秒刷新,指定进程动态

[root@centos7 ~]#top -d 1  -p 2118,1    #每秒刷新,指定进程动态
[root@centos7 ~]#top -d 1 -p 2118,1
top - 22:47:32 up 10:56,  4 users,  load average: 0.00, 0.01, 0.05
Tasks:   2 total,   0 running,   2 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.0 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3861292 total,  1475660 free,  1190340 used,  1195292 buff/cache
KiB Swap:     4092 total,     4092 free,        0 used.  2385604 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                        
  2118 root      20   0 3873888 191524  68412 S   0.0  5.0   1:03.28 gnome-shell                                    
     1 root      20   0  194196   7368   4260 S   0.0  0.2   0:10.02 systemd 

案例二:指定用户

[root@centos7 ~]#top -d 1 -u cyan
top - 22:51:52 up 11:00,  4 users,  load average: 0.04, 0.04, 0.05
Tasks: 252 total,   1 running, 251 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.2 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3861292 total,  1468624 free,  1196240 used,  1196428 buff/cache
KiB Swap:     4092 total,     4092 free,        0 used.  2379784 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                        
 20888 cyan      20   0  116320   2892   1660 S   0.0  0.1   0:00.05 bash                                           
 21010 cyan      20   0  149048   4900   2556 S   0.0  0.1   0:00.17 vim  

在命令行中运行top命令时,如果需要找出使用CPU最多的进程,按P键,可以按CPU使用率来降序显示。在Linux系统中的一个进程,最多可以使用100%CPU,对吗?不对,如果是4核心CPU的话,CPU运行率可以达到400%。


四、查看进程打开的文件lsof

lsof 命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)

-i   <条件>:列出符合条件的进程,ipv4 或 ipv6、协议、端口等。

-p  <进程号>:列出指定进程号所打开的文件;

[root@centos7 ~]#ps -axu | grep 889900
cyan      21110  0.0  0.1 149048  4928 pts/1    S+   22:58   0:00 vim 889900.txt
root      21287  0.0  0.0 112808   968 pts/2    R+   23:14   0:00 grep --color=auto 889900
[root@centos7 ~]#lsof -p 21110    ##一般用于查看木马进程,在读哪些文件
COMMAND   PID USER   FD   TYPE DEVICE  SIZE/OFF      NODE NAME
vim     21110 cyan  cwd    DIR    8,2      4096        69 /root
vim     21110 cyan  rtd    DIR    8,2      4096        64 /
vim     21110 cyan  txt    REG    8,2   2337216  35256610 /usr/bin/vim
vim     21110 cyan  mem    REG    8,2     61560  67308732 /usr/lib64
...
[root@centos7 ~]#lsof -i :22  ##用于查看端口,或查看黑客开启的后门端口是哪个进程在使用
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd     1263 root    3u  IPv4  28570      0t0  TCP *:ssh (LISTEN)
sshd     1263 root    4u  IPv6  28572      0t0  TCP *:ssh (LISTEN)
sshd    19460 root    3u  IPv4 110002      0t0  TCP centos7.9:ssh->192.168.31.1:pslicser (ESTABLISHED)
sshd    19465 root    3u  IPv4 108257      0t0  TCP centos7.9:ssh->192.168.31.1:iadt (ESTABLISHED)

五、控制管理进程 kill

关闭进程的3个命令:kill、killall、pkill。

kill命令通过指定PID关闭单个进程。命令使用格式:kill [信号] PID

killallpkill命令用于关闭指定程序名的所有相关进程。
命令使用格式:killall 程序名。
命令使用格式:pkill 程序名。

killall 和 pkill 命令用于杀死指定名字的进程
Kill命令关闭进程是通过信号的方式来控制进程的。

kill -l 列出所有支持的信号

[root@centos7 ~]#kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	

1、常用信号

编号信号名作用
1SIGHUP重新加载配置
2SIGINT键盘中断
3SIGQUIT键盘退出
9SIGKILL强制终止
15SIGTERM终止(正常结束),默认信号
18SIGCONT继续
19SIGSTOP停止
20SICTSTP暂停

案例一:杀死进程

指定PID

[root@centos7 ~]#ps aux | grep vim
root      18403  0.0  0.1 149264  5004 pts/0    S+   19:25   0:00 vim 1.text
cyan      21110  0.0  0.1 149048  4928 pts/1    S+   22:58   0:00 vim 889900.txt
root      21478  0.0  0.0 112812   964 pts/2    S+   23:33   0:00 grep --color=auto vim
[root@centos7 ~]#kill -9 21110 
指定PID关闭进程

指定服务

[root@centos7 ~]#killall sshd   #把sshd相关的所有进程关闭。
[root@centos7 ~]#pkill sshd     #把sshd相关的所有进程关闭。

其他示例
1)踢出一个从远处登录本机的用户
pkill -u 用户名

2)终止一个终端上的所有进程
pkill -t pts/2

3)终止一个终端上所有进程,并结束该终端
pkill -9 -t pts/2


六、进程的优先级 nice

Linux 进程调度多任务,每个CPU在一个时间点上只能处理一个进程,通过时间片技术,来同时运行多个程序。

由于不是每个进程都与其它进程同样重要,可告知进程调度程序为不同的进程使用不同的调度策略。

在这里插入图片描述

nice值越高:表示优先级越低,例如+18,容易将CPU使用量然给其它进程。
nice值越低:表示优先级越高,例如-20,此进程不倾向于让出CPU。

在top中显示的优先级有两个,PR值和nice值
NI: 实际nice值,可更改。
PR(nice+20): 将nice级别显示为映射到更大优先级队列,-20映射到0,+19映射到39,不可更改。


案例一:查看nice级别

[root@localhost ~]# ps axo pid,command,nice --sort=-nice

案例二:nice启动级别的设置

[root@centos7 ~]#sleep 6000 &              #启动默认为0
[1] 21655
[root@centos7 ~]#ps axo command,pid,nice |grep sleep
sleep 60                     21654   0
sleep 6000                   21655   0
grep --color=auto sleep      21657   0
[root@centos7 ~]#nice -n 5 sleep 6000 &     #指定启动级别为5
[2] 21659
[root@centos7 ~]#ps axo command,pid,nice |grep sleep
sleep 6000                   21655   0
sleep 6000                   21659   5
sleep 60                     21667   0
grep --color=auto sleep      21669   0
[root@centos7 ~]#renice -15 21659     #更改现有进程的nice级别
21659 (process ID) old priority 5, new priority -15
[root@centos7 ~]#ps axo command,pid,nice |grep sleep
sleep 6000                   21655   0
sleep 6000                   21659 -15
sleep 60                     21698   0
grep --color=auto sleep      21702   0

七、作业控制jobs

作业控制是一个命令行功能,允许一个shell实例管理多个命令。
如果没有作业控制,父进程fork()一个子进程后,将sleeping,直到子进程退出。

foreground(fg)——前台进程是在终端中运行的命令,该终端为进程的控制终端。前台进程接收键盘发生的输入和信号,并允许从终端读取或写入到终端。

backgroup(bg)——后台进程没有控制终端,它不需要终端的交互。看不见,但是在运行。

命令功能
&用在一个命令的最后,可以把这个命令放到后台执行
ctrl + z将一个正在前台执行的命令放到后台,并且暂停.
jobs查看当前有多少在后台运行的进程.它是一个作业控制命令
fg (foreground process)将后台中的命令调至前台继续运行
bg(background process)将一个在后台暂停的命令,变成继续执行

案例一:查看jobs

[root@centos7 ~]#jobs
[1]-  Running                 sleep 6000 &
[2]+  Running                 nice -n 5 sleep 6000 &

#+,-代表,使用fg时,默认调动至前台的进程。先是+,后是-

[root@localhost ~]# sleep 3000 &


[root@centos7 ~]#ps aux |grep sleep
root      21655  0.0  0.0 108052   352 pts/2    S    Mar31   0:00 sleep 6000
root      21659  0.0  0.0 108052   356 pts/2    S<   Mar31   0:00 sleep 6000
root      21850  0.0  0.0 108052   348 ?        S    00:07   0:00 sleep 60
root      21852  0.0  0.0 112808   968 pts/2    R+   00:08   0:00 grep --color=auto sleep

消灭后台进程 kill %1

root@centos7 ~]#kill  %1

[root@centos7 ~]#jobs
[2]+  Running                 nice -n 5 sleep 6000 &

注意,“kill 1” 和 “kill %1” 不同,
前者终止PID为1的进程,
后者杀死作业序号为1的后台程序。


总结:
& 后台运行程序
jobs 查询后台
kill %1 停止后台进程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值