linux 命令:ps 详解

 

名称

        ps - 展示当前进程的信息,以列表呈现

用法

        ps [选项]

描述

ps 展示关于运行的进程的信息。如果你想要让这个信息实时更新,请用top。

这个版本的ps接收几种选项:

        1        UNIX选项,必须使用'-'

        2        BSD选项,必须不能使用'-'

        3        GNU长选项,使用'--'

注意,ps -aux 和 ps aux 不同。 POSIX 和 UNIX 标准需要 ps -aux 打印所有属于用户x的进程,也打印所有 -a 选项选择的进程。如果用户x不存在,ps可能把这个命令看成ps aux,打印一个警告(warning)。

ps默认选择所有属于相同有效用户ID(euid=EUID)的进程作为当前用户并与调用者同一个终端关联。它展示进程ID(pid=PID)、进程所在的终端(tname=TTY)、[DD-]hh:mm:ss格式的cpu时间和可执行名称(ucmd=CMD)。输出默认不排序。

BSD风格的选项将默认加上进程状态(stat=STAT),展示命令的变量(args=COMMAND)而不是可执行名称。你可以使用PS_FORMAT环境变量覆盖这个。使用BSD风格的选项也会包括你拥有的其他终端(TTYs)的进程,这个也可以描述为:不展示其他用户和其他终端的进程。当选项在下面描述为“相同”时,不考虑这些影响,因此-M将被视为与Z相同,依此类推。

除下文所述外,进程选择选项是附加的。放弃默认选择,然后将所选进程添加到要显示的进程集。因此,如果进程符合任何给定的选择标准,则将显示该进程。

例子

用标准格式展示系统中的每个进程:

        ps -e

        ps -ef

        ps -eF

        ps -ely

用BSD格式展示系统中的每个进程:

        ps ax

        ps aux

展示进程树:

        ps -ejH

        ps axjf

得到线程信息:

        ps -eLf

        ps axms

得到安全信息:

        ps -eo euser,ruser,suser,fuser,f,comm,label

        ps axZ

        ps -eM

用用户格式展示root用户运行的进程:

        ps -U root -u root u

用用户定义格式展示每个进程:

        ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm

        ps -Ao pid,tt,user,fname,tmout,f,wchan

只打印rsyslogd的进程ID:

        ps -C rsyslogd -o pid=

只打印进程ID是21的进程名:

        ps -q 42 -o comm=

下边是各种参数的用法

简单进程选项

a解除 BSD 风格的“只有你自己”限制,当使用某些 BSD 风格(没有“-”)选项或 ps 个性设置类似于 BSD 时,该限制强加于所有进程的集合。 以这种方式选择的进程集是通过其他方式选择的进程集的补充。 另一种描述是这个选项会导致 ps 列出所有带有终端 (tty) 的进程,或者与 x 选项一起使用时列出所有进程。
-A选择所有进程,等于 -e。
-a选择除了会话领导和与终端无关的进程以外的所有进程。
-d选择除了会话领导以外的所有进程。
--deselect

选择除了满足特定条件(否定选择)的所有进程。等于 -N。

-e选择所有进程。等于 -A。
g所有,包括会话领导。这个选项时过时的,以后的版本可能会取消。
-N

选择除了满足特定条件(否定选择)的所有进程。等于 --deselect。

T选择所有跟当前终端有关的进程。等于没有任何参数的 t 。
r只选择正在运行的进程。
x解除 BSD 风格的“必须有一个 tty”限制,当使用某些 BSD 风格(不带“-”)选项或 ps 个性设置类似于 BSD 时,该限制强加于所有进程的集合。 以这种方式选择的进程集是通过其他方式选择的进程集的补充。 另一种描述是该选项使 ps 列出您拥有的所有进程(与 ps 相同的 EUID),或者在与 a 选项一起使用时列出所有进程。

用列表选择进程

        这些选项接收一个空格分隔的列表或逗号分割的列表为参数。列表可以多次使用。

        例如:ps -p "1 2" -p 3,4

        -123        等于        --pid 123

        123         等于        --pid 123

-C cmdlist(命令列表)

        选择cmdlist中的命令。注意:命令名不等于命令行。以前的procps版本和内核把命令名          的长度限制在15字符之内。现在这个限制解除了。

-G grplist(组列表)

        根据真实组ID(RGID)或组名称选择。真实组ID确定了创建进程的用户所属的组。

-g grplist

        根据会话或有效组名来选择。根据会话选择有多重标准,但根据有有效组名是使用一些          其他操作系统也在用的逻辑方法。当列表内容都是数字时,ps会根据会话选择。只有在          一些组名也被指定时,组ID数字才会起作用。参考 -s 和 --group。

--Group grplist

        等于 -G。

--group grplist

        根据有效组ID(EGID)或组名来选择。这个选项会选择那些有效组名或ID在grplist的进              程。有效组名描述了文件权限被进程使用的组。-g 经常等同于 --group。

p pidlist(进程ID列表)

        根据进程ID选择。等于 -p 和 --pid。

-p pidlist

        等于 p 和 --pid。

--pid pidlist

        等于 p 和 -p。

--ppid pidlist

        根据父进程的进程ID选择。

q pidlist

        根据进程ID选择(快速模式)。等于 -q 和 --quick-pid。

-q pidlist

        ps只读取pidlist中的pid的必要信息,而不会使用额外的筛选规则。pid是无序的。                    等于 q 和 --quick-pid。

--quick-pid pidlist

        等于q 和 -q。

-s sesslist(会话列表)

        根据会话ID选择。

--sid sesslist

        等于 -s。

t ttylist

        根据tty选择。几乎等于 -t 和 --tty,但是也能使用空的tty列表指定ps关联的终端。当tty            列表为空时,使用T选项是比t更简洁的。

-t ttylist

        根据tty选择。终端(tty或文本输出的屏幕)可以使用一下格式:/dev/ttyS1,ttyS1,              S1。'-'可以用于选择没有附属于任何终端的进程。

--tty ttylist

        根据终端选择。等于 -t 和 t。

U userlist

        根据有效用户ID(EUID)或用户名选择。有效用户ID描述了文件权限被进程使用的用户。

        等于 -u 和 --user。

-U userlist

        根据真实用户ID(RUID)或用户名选择。真实用户ID指的是创建进程的用户。

-u userlist

        等于 U 和 --user。

--User userlist

        根据真实用户ID(RUID)或用户名选择。等于 -U。

--user userlist

        等于 -u 和 U。

输出格式控制

这些选项是用来选择ps展示的信息。

-c        展示 -l 选项的不同调度器信息。

--context

          展示安全上下文格式(SELinux)

-f        以完整格式列出。这个选项可以和其他多种UNIX风格的选项加到一起,展示多个列。            也会打印出命令参数。使用 -L 时,NLWP(线程数)和LWP(线程ID)列也会展示出来。

-F       额外的完整格式。

--format format

          用户自定义格式。等于 -o 和 o。

j          BSD脚本控制格式

-j         脚本格式。

        展示长BSD格式。

-l         长格式。-y 选项经常一起用。

-M       添加一列安全数据。等于Z(SELinux)

O format

           预装了o(超载)。BSD O 选项可以呈现 -O 的效果(使用一些普通字段预定义的用               户自定义输出格式)或者可以用来排序。试探法用于确定此选项的行为。 为确保获得             所需的行为(排序或格式化),请以其他方式指定选项(例如使用 -O 或 --sort)。               当用作格式化选项时,它与 -O 相同,具有 BSD 特性。

-O format

          类似 -o,但是使用一些默认列预装了。等于 -o pid,format,state,tname,time,command            或 -o pid,format,tname,time,cmd。

o format

          等于 -o ,--format

-o format

          用户自定义的格式。format是一个空格分隔或逗号分隔的列表,提供了创建输出列的              方法。可识别的关键词在下边的标准格式说明符中展示。表头可能按照意愿进行重命              名(ps -o pid,ruser=RealUser -o comm=Command)。如果所有列名都是空的                      (ps -o pid= -o comm=),那么列名这一行不会被展示。比较宽的列名的列宽度将会            增加,这个可以用来增加列宽,比如WCHAN(ps -o pid,wchan=WIDE-WCHAN-                  COLUMN -o comm)。显式宽度控制(ps opid,wchan:42,cmd)也是提供的。                      ps -o pid=X,comm=Y 的行为因人而异,输出可能是“X,comm=Y”的一列或者“X”和“Y”              的两列。不确定时使用多个 -o 选项。使用环境变量PS_FORMAT指定一个默认值,              DefSysV和DefBSD是可以用来选择默认UNIX和BSD列的宏。

s        展示信号格式。

      展示面向用户的格式

v        展示虚拟内存格式

X        注册器格式

-y       不展示标志(flags),在addr(地址)栏展示rss。这个选项只能跟 -l 一起用。

      添加一个安全数据列。等于 -M(SELinux)

输出模式

c        展示真实命令名称。这个是源自执行文件的名称,而不是argv值。命令参数和任何对              它的修改不会被展示。这个选项有效地把args格式关键词改成comm格式关键词,这              对 -f format 选项和各种 BSD风格的格式选项有效,因为这些默认是展示命令参数                  的。参考 -f 选项,格式关键词args,格式关键词comm。

--cols n

          设置屏幕宽度。

--columns n

          设置屏幕宽度。

--cumulative

          包括一些被杀掉的子进程数据(作为与父进程的总和)

      在命令后边展示环境。

f         ASCII格式的进程树

--forest

          等于 f

      没有表头。(或者,在BSD风格中,每个屏幕有一个表头)。h 选项是有问题的。标              准BSD ps 使用这个选项在输出的每一页打印表头,但是老版本的Linux ps 使用这个              选项不显示表头。这个版本的 ps 跟Linux一致,不展示表头,除非选择了BSD风格。            不管当前的风格,你可以使用 --headers 和 --no-headers 来在每页打印表头或不打印            表头。

-H       每页展示表头。

k spec

           指定排序规则。排序格式是: [+|-]key[,[+|-]key[,...]]。从标准格式说明符选择一个多字               母关键词。“+”是可选的前缀,因为默认顺序是升序或字典顺序。等于 --sort。

           例子:ps jaxkuid,-ppid,+pid

                      ps axk comm o comm,args

                      ps kstart_time -ef

--lines n

            设置屏幕高度。

n           WCHAN和USER 用数字格式输出(包括所有类型的UID和GID)

--no-headers

              不打印表头。等于 --no-heading。

O order

              排序(过载)。BSD O 选项可以呈现 -O 的效果(加上预定义的普通字段的用户自                定义输出格式)或者用来指定排序规则。试探法用于确定此选项的行为。为确保获                得所需的行为(排序或格式化),请以其他方式指定选项(比如:-O 或 --sort)。

              对于排序,过时的 BSD O 选项语法是 O[+|-]k1[,[+|-]k2[,...]] 。它根据由单字母短关                键词 k1、k2、... 的序列指定的多级排序对进程列表进行排序,如下面过时排序关                  键词部分所述。“+”现在是可选的,仅仅在关键词上重新迭代默认排序方向,但可能                有助于区分 O 排序和 O 格式。 “-”只在它前面的关键词上反转方向。

--rows n

              设置屏幕高度。

          总和几种信息,比如CPU使用,从被杀掉的子进程到它们的父进程。这个功能可以                 有效检查一个系统,在这个系统中父进程不断分支出短时间存在的子进程。

--sort spec

               指定排序规则。排序格式是[+|-]key[,[+|-]key[,...]] 。从标准格式说明符选择一个多                   字母关键词。“+”是可选的前缀,因为默认顺序是升序或字典顺序。等于 k。例如:                 ps jax --sort=uid,-ppid,+pid

           宽输出。使用两次这个命令可以实现无限制宽度。

-w            宽输出。使用两次这个命令可以实现无限制宽度。

--width n

               设置屏幕宽度。

展示线程

      像进程那样展示线程。

-L        展示线程,可能也会有LWP和NLWP列。

      在进程后展示线程

-m       在进程后展示线程

-T        展示线程,可能也会有SPID列。

其他信息

--help section

          打印帮助信息。section的值可以是simple、list、output、threads、misc或all。也可                以用缩写:s|l|o|t|m|a。

--info

          打印调试信息。

L        列出所有格式说明符。

      打印procps-ng的版本。

-V       打印procps-ng的版本。  

--version

          打印procps-ng的版本。     

进程状态标志

这些是s,stat,state的输出说明符(表头是“STAT”或“S”)。表示一个进程的状态信息。

D不可中断休眠(IO)
I(大写i)空闲内核线程
R正在运行或可运行(在运行队列)
S可中断休眠(等一个时间来完成)
T因作业控制信号而停止
t在跟踪期间被调试器停止
W分页(内核2.6.x版本后无效)
X已杀死(应该永远不会看到)
Z僵尸进程

在使用BSD格式时,stat可能会展示额外的标志:

<高优先级
N低优先级
L内存有被锁定的页(实时和自定义IO)
s是会话领导
l(小写L)是多线程的(使用CLONE_THREAD,类似NPTL pthreads)
+在前台进程组里

过时的排序关键词

这些键由 BSD O 选项使用(当它用于排序时)。 GNU --sort 选项不使用这些键,而是使用下面标准格式说明符部分中描述的说明符。 请注意,排序中使用的值是 ps 使用的内部值,而不是某些输出格式字段中使用的“cooked”值(例如,在 tty 上排序将排序为设备编号,而不是根据显示的终端名称)。 如果要对“cooked”值进行排序,请将 ps 输出通过管道传输到 sort 命令中。

长版本功能
ccmd简单的可执行名称
Cpcpucpu使用
fflags长格式 F 字段中的标志
gpgrp进程组ID
Gtpgid控制tty进程组ID
jcutime累计用户时间
Jcstime累计系统时间
kutime用户时间
mmin_flt次要页面错误的数量
Mmaj_flt主要页面错误的数量
ncmin_flt累计次要页面错误
Ncmaj_flt累计主要页面错误
osession会话ID
ppid进程ID
Pppid父进程ID
rrss常驻集大小
Rresident常驻页面
ssize以kb为单位的内存大小
Sshare共享页面数量
ttty控制的tty的设备数量
Tstart_time进程启动的时间
Uuid用户ID
uuser用户名
vvsizeKiB为单位的虚拟内存总大小
ypriority内核调度优先级

AIX 格式描述符

ps支持AIX格式描述符。类似printf命令的格式。例如,ps -eo "%p %y %x %c"。

代码参数名表头
%Cpcpu%CPU
%GgroupGROUP
%PppidPPID
%UuserUSER
%aargsCOMMAND
%ccommCOMMAND
%grgroupRGROUP
%nniceNI
%ppidPID
%rpgidPGID
%tetimeELAPSED
%uruserRUSER
%xtimeTIME
%yttyTTY
%zvszVSZ

标准格式描述符

这里是用于控制输出格式(例如,使用 -o 选项)或者用GNU风格的 --sort 对选择的进程进行排序。例如:ps -eo pid,user,args --sort user

这些用户定义的格式描述符可能包括空格:args,cmd,comm,command,fname,ucmd,ucomm,lstart,bsdstart,start。

一些关键词可能不能用来排序。

代码表头功能
%cpu%CPU以“##.#”为格式的进程cpu使用情况。是一个百分数,但不显示%。
%mem%MEM当前使用的内存的百分比。
argsCOMMAND完整的命令。可能包括空格。一个标记为<defunct>的进程已经部分杀掉了,等待父进程将它完全杀掉。如果这个描述符出现在最后,这个列会延长到屏幕最右边。环境变量 COLUMNS 或 --cols 选项可以用来决定宽度。w 或 -w 选项也可以调整宽度。
blockedBLOCKED被屏蔽的信号。
bsdstartSTART命令被执行的时间。如果是24小时之内执行的,输出格式是“ HH:MM”,否则就是“ Mmm:SS”,Mmm是三位数的月份。
bsdtimeTIME累计的cpu时间,用户+系统。格式是“MMM:SS”。
cC处理器使用。百分数。
caughtCAUGHT捕捉的信号。
cgnameCGNAME进程属于的控制组的名称。
cgroupCGROUP进程属于的控制组。
classCLS

进程的调度级别。可能的值有:

-        没有上报

TS     SCHED_OTHER

FF     SCHED_FIFO

RR    SCHED_RR

B       SCHED_BATCH

ISO   SCHED_ISO

IDL    SCHED_IDLE

DLN  SCHED_DEADLINE

?       不能识别的值   

clsCLS等于class。
cmdCMD等于args。
commCOMMAND等于args。
commandCOMMAND等于args。
cpCP十分之一为单位的cpu使用率。
cputimeTIME累计cpu时间。“[DD-]hh:mm:ss”。
cputimesTIME秒为单位的累计cpu时间。
drsDRS数据驻留集大小,专用于可执行代码以外的物理内存量。
egidEGID进程的有效组ID数量。
egroupEGROUP进程的有效组ID。
eipEIP指令指针。
espESP栈指针。
etimeELAPSED进程持续时间,[[DD-]hh:]mm:ss。
etimesELAPSED以秒为单位的进程持续时间。
euidEUID有效用户ID。
euserEUSER有效用户名。应该是文字的,如果宽度允许可以是十进制数字。
fF进程的标志。参考上边的进程状态标志部分。
fgidFGID文件系统访问组ID。
fgroupFGROUP文件系统访问组ID。应该是文字的,如果宽度允许可以是十进制数字。
flagF等于f。
flagsF等于f。
fnameCOMMAND进程可执行文件名的前8个字节。
fuidFUID文件系统访问用户ID。别名是fsuid。
fuserFUSER文件系统访问用户ID。应该是文字的,如果宽度允许可以是十进制数字。
gidGID等于egid。
groupGROUP等于egroup。
ignoredIGNORED被忽略的信号。
ipcnsIPCNS描述进程属于的命名空间的唯一inode数。
labelLABEL安全标志,更普遍用于SELinux上下文数据。这是用于高安全性系统的强制访问控制。
lstartSTARTED等于bsdstart。
lsessionSESSION如果包括了systemd支持,展示进程的登录会话描述符。
luidLUID展示进程的登录ID。
lwpLWP可调度实体的轻量进程(线程)ID。
lxcLXC任务运行所在的lxc容器的名称。如果进程没有在容器内运行,显示‘-’。
machineMACHINE如果包含 systemd 支持,则显示分配给 VM 或容器的进程的机器名称。
maj_fltMAJFLT发生在这个进程的主要页面错误的数量。
min_fltMINFLT发生在这个进程的次要页面错误的数量。
mntnsMNTNS等于ipcns。
netnsNETNS等于ipcns。
niNI优先级值。范围从19(最高)到-20(最低)。
niceNI等于ni。
nlwpNLWP进程中 lwp(线程)的数量。
numaNUMA最近使用的处理器的节点。-1意味着NUMA信息获取不到。
nwchanWCHAN进程休眠的内核函数地址。如果想要内核函数名,使用wchan。运行的任务显示为‘-’。
ouidOWNER如果包括了systemd支持,展示进程的会话的所有者的Unix用户描述符。
pcpu%CPU等于%cpu。
pendingPENDING待办的信号。进程的待办信号不同于单个线程的待办信号。
pgidPGID进程组ID,或者进程组领导的进程ID。
pgrpPGRP等于pgid。
pidPID进程ID。
pidnsPIDNS等于ipcns。
pmem%MEM等于%mem。
policyPOL等于class。
ppidPPID父进程ID。
priPRI进程优先级。数字越大,优先级越低。
psrPSR进程被分配的处理器。
rgidRGID真实组ID。
rgroupRGROUP真实组名。应该是文字的,如果宽度允许可以是十进制数字。
rssRSS常驻集大小,任务已使用的非交换物理内存(以kb为单位)。
rssizeRSS等于rss。
rszRSZ等于rss。
rtprioRTPRIO真实时间优先级。
ruidRUID真实用户ID。
ruserRUSER真实用户ID。应该是文字的,如果宽度允许可以是十进制数字。
sS展示最小状态(一个字符)。参考进程状态标志。
schedSCH

进程的调度策略。

SCHED_OTHER (SCHED_NORMAL)、SCHED_FIFO、SCHED_RR、SCHED_BATCH、SCHED_ISO、SCHED_IDLE 和 SCHED_DEADLINE 分别对应 0、1、2、3、4、5和6。

seatSEAT如果包括了systemd支持,展示与分配给特定工作区的硬件设备有关的描述符。
sessSESS会话ID,或者会话领导的会话ID。别名session。
sgi_pP进程当前执行所在的处理器。如果进程没有运行或不可运行,展示“*”。
sgidSGID保存的组ID。
sgroupSGROUP保存的组ID。应该是文字的,如果宽度允许可以是十进制数字。
sidSID等于sess。
sigPENDING等于pending。
sigcatchCAUGHT等于caught。
sigignoreIGNORED等于ignored。
sigmaskBLOCKED等于blocked。
sizeSIZE如果进程要弄脏所有可写页面然后被换出,大约需要的交换空间量。 这个数字很粗糙!
sliceSLICE如果包括了systemd支持,展示进程属于的切片单元。
spidSPID等于lwp。
stackpSTACKP进程的栈的底(开始)的地址。
startSTARTED等于bsdstart。
start_timeSTART等于bsdstart。
statSTAT多字符的进程状态。参考进程状态标志
stateS等于s。
suidSUID保存的用户ID。
supgidSUPGID补充组的组ID。
supgrpSUPGRP补充组的组名称。
suserSUSER保存的用户名。应该是文字的,如果宽度允许可以是十进制数字。
svgidSVGID等于sgid。
svuidSVUID等于suid。
szSZ进程核心映像的物理页大小。这包括文本、数据和堆栈空间。设备映射当前被排除。
tgidTGID用数字表示任务属于的线程组。是线程组领导的进程ID。
thcountTHCNT等于nlwp。
tidTID等于lwp。
timeTIME等于cputime。
timesTIME等于cputimes。
tnameTTY控制tty(终端)。
tpgidTPGID进程连接到的 tty(终端)上的前台进程组的 ID,如果进程未连接到 tty,则为 -1。
trsTRS专用于可执行代码的文本驻留集大小、物理内存数量。
ttTT等于tname。
ttyTT等于tname。
ucmdCMD等于comm。
ucommCOMMAND等于comm。
uidUID等于euid。
unameUSER等于euser。
unitUNIT如果包括了systemd支持,展示进程属于的单位。
userUSER等于euser。
usernsUSERNS等于ipcns。
utsnsUTSNS等于ipcns。
uunitUUNIT如果包括了systemd支持,展示进程属于的用户单位。
vsizeVSZ等于vsz。
vszVSZ已KiB为单位的进程的虚拟内存大小。设备映射当前被排除。
wchanWCHAN进程休眠的内核函数地址。运行的任务显示为‘-’。如果ps没有展示线程,多线程的进程显示为‘*’。

环境变量

这些环境变量可以影响ps:

COLUMNS

                覆盖默认展示宽度。

LINES

                覆盖默认展示高度。

PS_PERSONALITY

                设置为posix、old、linux、bsd、sun、digital等,参考下边的特性

CMD_ENV

                设置为posix、old、linux、bsd、sun、digital等,参考下边的特性

I_WANT_A_BROKEN_PS

                强制过时的命令行解释。

LC_TIME

                日期格式。

PS_COLORS

                当前不支持。

PS_FORMAT

                覆盖默认输出格式。可以使用 -o 选项设置。DefSysV 和 DefBSD 是有用的。

POSIXLY_CORRECT

                不要找借口忽略不好的特性。

POSIX2

                设置为开启时,和POSIXLY_CORRECT一样效果。

UNIX95

                不要找借口忽略不好的特性。

_XPG

                取消CMD_ENV=irix 不标准的行为。

一般来说,设置这些环境变量不是好主意。唯一的例外是 CMD_ENV 或 PS_PERSONALITY,可以设置为 Linux 作为普通系统。如果不这么做,ps 会使用不好的、没用的 Unix98 标准。

特性(简单看看)

390                类似OS/390 开放版本 ps

aix                 类似AIX ps

bsd                类似FreeBSD ps (完全非标准)

compaq         类似 Digital Unix ps

debian           类似旧的 Debian ps

digital             类似 Tru64 (以前是 Digital Unix, OSF/1) ps

gnu                类似旧的 Debian ps

hp                  类似 HP-UX ps

hpux              类似 HP-UX ps

irix                 类似 Irix ps

linux               推荐

old                  类似原始 Linux ps(完全非标准

os390             类似 OS/390 开放版本 ps

posix               标准

s390                类似 OS/390 开放版本 ps

sco                  类似 SCO ps

sgi                   类似Irix ps

solaris2           类似 Solaris 2+ (SunOS 5) ps

sunos4            类似 SunOS 4 (Solaris 1)ps

svr4                 标准

sysv                 标准

tru64                类似 Tru64(以前是 Digital Unix, OSF/1) ps

unix                  标准

unix95              标准

unix98              标准

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值