【Linux】进程管理

LINUX系统进程管理 进程是计算机系统中最重要的概念之一,在计算机系统中并行运行着大量的程序,这些程序不可能独占系统的全部资源,而是需要这些程序共享系统资源,所以这些程序在运行时会产生一定的竞争关系。那在这种情况下,系统资源怎么分配?运行程序该如何管理呢?操作系统为了解决这一系列的问题引入了进程的概念,用来作为操作系统分配和管理系统资源的基本单位。所以进程的出现是为了让系统资源的利用更加合理,从而提高系统的运行效率。定义进程,就避免不了提到另一个概念“程序”。 阅读详情

Linux 就像玩游戏,我要 double kill ......

0. 前言

时常在深夜写代码,耳边萦绕着键盘的轻敲声和电脑风扇的低吟声。昏暗的电脑屏幕照亮了周围的空间,一个舒适而亲密的空间。窗外的夜空清晰明亮,星星闪烁着像小钻石一样。感觉外面的世界已经消失了,只留下了我和我的代码。时间像流水,渐渐流逝;代码如火车,慢慢跑起。随着代码奔跑带动的风扇旋转声越来越大,鼠标和键盘的输入在屏幕上逐渐变卡,直到所有IO都定格在某个隐秘的位置…我意识到:死机了,进程卡死了!

好了,这段充满意境的开场白其实是大语言模型为我们提供的,目的就是引出本文的主角:进程。

迄今为止,进程管理一直都是绝大多数OS逃不开的话题,是几乎每个OS都要提供的基础功能,Linux也不例外。

本文将要介绍的是 Linux 中常见的进程管理。下面我们开始!

学习目标

  1. 学习 Linux 中 进程管理相关的命令
  2. 会使用相关命令,对自己或服务器的Linux作进程管理

参考教程

1. 查看进程

现代操作系统通常都支持多重任务处理,系统通过快速切换运行中的程序,使得用户在宏观上的感受是多个任务同时执行。随着硬件的发展,一些计算机也可以通过并行的方式实现多个任务同时进行,但最终也离不开进程管理。Linux内核通常使用进程来控制多重任务。

本文开头提到的死机现象,就是应用程序停止响应,或者由于进程冲突等因素,触发了操作系统的中断程序,导致整个计算机中断。有时,我们的进程还不至于使操作系统触发中断机制,只是计算机的运算速度变得很慢,这时候,我们使用进程管理就很必要了。

在图形化操作的操作系统,例如我们用得最多的Windows,一般来说出现卡了的现象,我们就打开应用管理器,把一些不必要的进程杀掉,或者手动退出各种应用程序即可。

那么在Linux命令行,我们如何控制进程呢?

在控制进程之前,我们首先要学会查看进程。GUI查看进程的方式非常直观,Linux也提供了一些命令供用户查看进程。

1.0 Linux 进程工作

在正式学习命令之前,我们先来了解一下在Linux中,进程是如何工作的。

Linux系统启动时,内核先把它的一些程序初始化为进程,然后运行一个名为init的程序(即初始化的简称)。init程序将依次运行一系列的初始化shell脚本(init script,于 /etc 目录下)。这些脚本会启动所有的系统服务。其中,许多服务是通过守护程序(daemon program)实现的。

一个程序的运行可以出发其他程序的运行,即父进程创建子进程。

Linux内核会保存每个进程的信息以便确保任务有序进行。每个进程会被分配一个ID,其中,init的 ID 始终为1。Linux 内核同时记录分配给每个进程的内存信息以及用来恢复运行的进程就绪信息。

继承自UNIX一切接文件的思想,进程在系统中也和文件类似,也存在所有者、用户ID等等信息。

接下来的小节中,我们将接触到这些信息。为了方便一些操作与演示,本文将用Ubuntu系统来进行实操演示。

1.1 ps 显示当前所有进程

唠了这么久,我们终于开始了本文的实操环节了。首先要介绍的的ps命令,用于查看进程信息。

举例

sharry@sharry-virtual-machine:~/Desktop$ ps
    PID TTY          TIME CMD
  52560 pts/0    00:00:00 bash
  52758 pts/0    00:00:00 ps

不带选项的ps,只输出了当前终端会话相关的进程信息。其中,这个例子输出了ID、终端、消耗的CPU时间总和,以及进程名。

我们带一些选项试试吧:

sharry@sharry-virtual-machine:~/Desktop$ ps -x
    PID TTY      STAT   TIME COMMAND
   1904 ?        Ss     0:02 /lib/systemd/systemd --user
   1906 ?        S      0:00 (sd-pam)
   1912 ?        S<sl   0:00 /usr/bin/pipewire
   1913 ?        Ssl    0:00 /usr/bin/pipewire-media-session
   1914 ?        S<sl   0:01 /usr/bin/pulseaudio --daemonize=no --log-target=journal
   1924 ?        Ss     0:03 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
   1926 ?        Sl     0:00 /usr/bin/gnome-keyring-daemon --daemonize --login
   1934 ?        Ssl    0:00 /usr/libexec/gvfsd
   1941 ?        Sl     0:00 /usr/libexec/gvfsd-fuse /run/user/1000/gvfs -f
   1954 ?        Ssl    0:00 /usr/libexec/xdg-document-portal

结果太长,此处选取了一部分粘贴在这里,读者有空可自己多尝试。
-x选项表示ps所有进程,而不需要关注它们是哪个终端的,因此TTY列显示的问号?表示没有控制终端; STAT表示进程运行状态,常见的状态有:

  • R 运行状态
  • S 睡眠状态
  • D 不可中断的睡眠状态
  • T 暂停状态
  • Z 僵尸进程
  • < 高优先级进程
  • N 低优先级进程

更详细的信息读者可多查阅相关文档以获取更深一步了解。

前面我们提到过 进程还有 用户ID 等更多信息,因此ps也提供了 -aux选项来获取更多信息:

sharry@sharry-virtual-machine:~/Desktop$ ps -aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.1  0.2 168072  9908 ?        Ss   18:59   0:13 /sbin/init auto noprompt splash
root           2  0.0  0.0      0     0 ?        S    18:59   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   18:59   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   18:59   0:00 [rcu_par_gp]
root           5  0.0  0.0      0     0 ?        I<   18:59   0:00 [slub_flushwq]

其中,一些列的含义显而易见,这里补充几个列的说明:

  • %MEN 使用内存百分比
  • VSZ 虚拟耗用内存大小
  • RSS 实际使用内存大小

1.2 top 实况显示任务

top显示的实况任务,运行top命令后,会进入top,然后实时刷新各进程的信息

top

一般情况下,我们要退出top按 q 即可。

1.3 jobs 列出活动作业信息

为了方便截图与演示,本文小编用了一台Ubuntu虚拟机,这台Ubuntu尚未配置关闭GUI最小化运行,因此保留了图形化界面。我们首先运行xlogo程序来看看图形化效果吧:
xlogo

然后,我们执行jobs查看通过终端启动的进程信息:

sharry@sharry-virtual-machine:~/Desktop$ jobs
[1]+  Running                 xlogo &

返回了运行状态及是否为后台运行,&表示在后台运行。关于进程的&,将在下面章节介绍。

2. 控制进程

最鸡动人心的章节来啦,本章介绍包括kill在内的进程控制方式。

2.1关机与重启

通常,关机或重启能解决98%的问题,这是因为当进程由于某些原因卡死时,通过OS关机或重启的操作,可以在操作系统层面杀死卡死的进程,并由操作系统的备份策略,当重启时,保留一部分运行信息,并可由该进程的设定决定是否接着运行下去。

关机

shutdown [选项] [其它信息]

选项与参数说明:

-c:#执行shutdown命令后,只需要按+键就可以中断正在执行的命令
-f:#重启时不执行fsck
-F:#重启时执行fsck
-h:#关机
-k:#发送信息给所有用户,但不会关机
-n:#不调用init程序进行关机
-r:#关机之后再重新启动
-t<秒数>:#发送警告信息和删除信息之间的延迟时间

重启

reboot [选项]

选项说明:

-n : 在重开机前不做将记忆体资料写回硬盘的动作
-w : 并不会真的重开机,只是把记录写到 /var/log/wtmp 档案里
-d : 不把记录写到 /var/log/wtmp 档案里(-n 这个参数包含了 -d)
 -f : 强迫重开机,不呼叫 shutdown 这个指令
-i : 在重开机之前先把所有网络相关的装置先停止

注:以上 shutdown及 reboot命令的说明,节选自INFQ社区 以及 BootWiki

2.2 bg、& 设置后台作业

前面我们已使用过 &让xlogo程序在后台运行,当我们不加&时,我们会发现,无法再在当前terminal执行其他命令,除非ctrl + c终止该进程,读者可以试试。

& 后台运行并返回进程号
我们拿 cat 命令来试试:

sharry@sharry-virtual-machine:~/Desktop$ cat &
[2] 53349

bg 将进程放到后台作业
我们用经典的 sleep命令来测试 这个命令的效果:

sharry@sharry-virtual-machine:~/Desktop$ sleep 400
^Z
[2]+  Stopped                 sleep 400
sharry@sharry-virtual-machine:~/Desktop$ bg %2
[2]+ sleep 400 &

由上述例子可见,当我们暂停了sleep命令后,再使用bg + [序列号]的方式可以将进程放到后台作业,执行bg命令后,标准输出返回了bg命令的执行信息:当前终端进程序列号 命令 及后台运行&

2.3 fg 设置前台作业

fg的使用与bg相似,作用相反。我们直接举例子:
将cat先放入后台运行,再用fg放到前台运行:

sharry@sharry-virtual-machine:~/Desktop$ cat 
^Z
[1]+  Stopped                 cat
sharry@sharry-virtual-machine:~/Desktop$ bg %1
[1]+ cat &
sharry@sharry-virtual-machine:~/Desktop$ fg %1
cat
hahaha
hahaha

2.4 kill 杀死进程

我们常用kill命令来执行杀死进程的操作,也是最常用的kill操作之一。例如:

sharry@sharry-virtual-machine:~/Desktop$ xlogo &
[1] 55887
sharry@sharry-virtual-machine:~/Desktop$ kill 55887
sharry@sharry-virtual-machine:~/Desktop$ ps
    PID TTY          TIME CMD
  55866 pts/0    00:00:00 bash
  55888 pts/0    00:00:00 ps
[1]+  Terminated              xlogo

其实,kill的作用还有很多,不仅仅是杀掉进程,kill一般情况下,kill命令的格式为:

kill [-信号选项] 进程号

当我们不选择代表信号的选项时,默认是杀死进程。

常见的进程信号有:

  • HUP 挂起
  • INT 中断信号,和键盘执行ctrl + c的效果一致
  • KILL 强杀死信号。我们知道,一般情况下我们杀死一个进程,实际上执行的是进程中断,进程中断后,再交给内核对该进程作剩下的处理,例如清理或对当前工作保存。而KILL信号,则是强行将该进程教友内核终止。一般情况下,KILL是一个兜底的选项
  • TERM 终止进程,即杀死进程,当我们不选择代表信号的选项时,默认向进程发送的信号就是这个TERM
  • STOP 暂停,仅仅是暂停一下进程而已
  • CONT 对暂停的进程恢复运行

我们稍微举个例子:

sharry@sharry-virtual-machine:~/Desktop$ xlogo &
[1] 79605
sharry@sharry-virtual-machine:~/Desktop$ jobs
[1]+  Running                 xlogo &
sharry@sharry-virtual-machine:~/Desktop$ kill -STOP 79605
sharry@sharry-virtual-machine:~/Desktop$ jobs
[1]+  Stopped                 xlogo
sharry@sharry-virtual-machine:~/Desktop$ 
sharry@sharry-virtual-machine:~/Desktop$ kill -CONT %1
sharry@sharry-virtual-machine:~/Desktop$ jobs
[1]+  Running                 xlogo &
sharry@sharry-virtual-machine:~/Desktop$ 

kill的信号选项还有很多,如 -QUIT退出信号等等,读者可以用到的时候再去查阅文档,以决定最适合的kill选项。

2.5 killall 杀死多个进程

有了上一小节的基础,killall就很好理解了,它就像是对kill命令的一个拓展,可以一次性向多个进程发送信号,如果有Root 用户权限,还能向普通用户的进程发送信号,格式如下:

killall [-u user] [-signal] name

注意,这里的name直接就是进程名字,可以直接向所有同名进程发送信号。

sharry@sharry-virtual-machine:~/Desktop$ xlogo &
[2] 79842
sharry@sharry-virtual-machine:~/Desktop$ xlogo &
[3] 79843
sharry@sharry-virtual-machine:~/Desktop$ jobs
[1]   Running                 xlogo &
[2]-  Running                 xlogo &
[3]+  Running                 xlogo &
sharry@sharry-virtual-machine:~/Desktop$ killall xlogo 
[1]   Terminated              xlogo
[2]-  Terminated              xlogo
[3]+  Terminated              xlogo
sharry@sharry-virtual-machine:~/Desktop$ jobs
sharry@sharry-virtual-machine:~/Desktop$ 

3. 总结与补充

除了用命令行,我们还可以通过键盘停止当前运行,例如,经典的ctrl + c,或者执行一些指令让程序满足终止条件,例如cat 的 ctrl + d等等。当然这在前面以及其他一些参考资料也提到过,有趣的是,ctrl + c在其他OS 的一些终端也适用,就像Windows的powershell。

另外,要暂停一个在前台运行的进程,我们可以用ctrl + z。

键盘信号
为什么我们按下ctrl + c时,进程就终止了呢?这是因为,当终端接收到我们键盘的输入时,它将发送信号到前台进程。当我们按下的是ctrl + c时,它将发送一个称为TSTP(Terminal Stop)的信号,这个信号的原理与kill命令发送信号是类似的。同时,进程也会监听到信号并按照信号的指示进行下一步的操作。

最后,我们总结一下:本文首先介绍了Linux下进程的运行方式,再介绍了查看进程信息的方式:ps、jobs等,最后,我们介绍了进程控制方式,包括将进程设置为后台、前台运行、kill 杀死进程 或向进程发送信号量等。

下次再遇到Linux系统慢、卡,解决的手段又多了。

【Linux系统】进程管理 进程是一个正在运行的程序实例,是操作系统分配资源(如 CPU 时间、内存、文件描述符等)的基本单位。每个进程都有一个唯一的标识符(PID,进程 ID),通过它可以管理和区分不同的进程。CPU ----> CPU是一个中介,这些进程是挂壁等待执行的程序,比如深圳的三和大神,打两天零点工 + 在网吧躺三天,然后再打三天零工,虽然三和大神摆烂了,但为了生存所需他们仍旧需要工作,于是,等到他们需要又会去黑中介那里接单打几天零工 —— 三和大神的工作模式就类似于电脑中的各种进程; 阅读详情

相关推荐

光电式烟雾传感器实战指南(一) 光迷宫设计与散射原理篇

本文深入解析了光电式烟雾传感器的核心部件——光迷宫的设计原理与光散射机制。文章详细阐述了如何通过精心设计的光学结构实现‘透气不透光’,并重点探讨了前向散射(尤其是135°角)在提升烟雾监测系统灵敏度与可靠性中的关键作用,为DIY爱好者提供了从理论到实践的完整指南。

weixin_29229055的博客 590

Linux学习之进程管理

Linux 为我们提供了一些工具来查看进程的状态信息。 我们可以通过top实时的查看进程的状态,以及系统的一些信息(如 CPU、内存信息等); 我们还可以通过ps来静态查看当前的进程信息; 同时我们还可以使用pstree来查看当前活跃进程的树形结构。 1 top 工具的使用 top工具是我们常用的一个查看工具,能实时的查看我们系统的一些关键信息的变化: top ...

薛定谔的猫-前端领域 325

基于PlatformIO与CMSIS的STM32库函数开发实战:从环境搭建到外设驱动

本文详细介绍了基于PlatformIO与CMSIS的STM32库函数开发实战,从环境搭建到外设驱动实现。通过对比传统IDE,PlatformIO结合CMSIS框架在跨平台开发、代码可移植性和调试体验上更具优势。文章包含PlatformIO.ini配置详解、GPIO/USART驱动开发实例及常见问题解决方案,帮助开发者高效完成STM32项目开发。

weixin_29190169的博客 424

Linux进程管理

用于查看进程树之间的关系,谁是父进程,谁是子进程,可以清楚的看出来是谁创建了谁语法:pstree [选项]

LPH3119的博客 973

COMSOL+AI实战:5个超实用技巧让你的仿真效率翻倍(附Python代码)

本文详细介绍了如何将人工智能(AI)与COMSOL仿真软件结合,通过Python脚本实现五大实用技巧,包括自动化生成数据集、构建代理模型、集成AI优化算法、利用神经网络加速场量求解以及智能结果分析,从而显著提升多物理场仿真的效率和自动化水平。

weixin_29230865的博客 443

【深度解析】信息素养提升实践活动(附:历年获奖作品分析)

全国师生信息素养提升实践活动是由教育部教育技术与资源发展中心(中央电化教育馆)主办,面向全国师生的一项信息化交流展示活动。

m0_74417957的博客 2630

Linux进程管理指令

<br /><br />作者:北南南北<br />来自:LinuxSir.Org<br />摘要:本文讲述的时进程管理的基本概念和进程管理工具介绍;文中的重点对进程管理工具的分类介绍及应用举例,包括 ps、pgrep、top 、kill、pkill、killall、nice和renice 等工具。<br /><br /><br />1、程序和进程;<br /><br />程序是为了完成某种任务而设计的软件,比如OpenOffice是程序。什么是进程呢?进程就是运行中的程序。<br />一个运行着的程序,可能

lengyuhong的专栏 3782

得利捷datalogic扫码枪调试说明

针对得利捷datalogic扫码枪快速调试并,可以根据详细步骤设置扫码枪,并配有tcp调试助手辅以验证,以达到快速调试完成扫码枪的工作。

Conway510的博客 1万+

linux-进程管理

进程是正在执行的一个程序或命令,每个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。程序是人使用计算机语言编写的可以实现特定目标或解决特定问题的代码集合。这么讲很难理解,那我们换一种说法。程序是人使用计算机语言编写的,可以实现一定功能,并且可以执行的代码集合。而进程是正在执行中的程序。当程序被执行时,执行人的权限和属性,以及程序的代码都会被加载入内存,操作系统给这个进程分配一个 ID,称为 PID(进程 ID)。也就是说,在操作系统中,所有可以执行的程序与命令都会产生进程。

qq_64485253的博客 1309

【ArcGIS风暴】ArcGIS 10.2导入Excel数据X、Y坐标(经纬度、平面坐标),生成Shapefile点数据图层

用过CASS的人都知道,野外数字测图得到的点数据(平面坐标)可以直接导入到CASS中,进一步绘制地形图。那么,带有坐标的数据能不能在ArcGIS中实现点图层的生成呢?答案是必须的! 本文以气象台站shp数据的生成为例,详细介绍ArcGIS 10.2中导入X、Y坐标(这里指的是经度、纬度),生成Shapefile点数据的流程。 相关阅读:《全站仪、RTK测量坐标数据在CASS和ArcGIS中展点的区别和联系》 目录 1、数据准备 2、添加X、Y数据 3、属性表连接(Join) 4、导出为Sh.

智慧空间实验室 10万+

【雕爷学编程】Arduino动手做(45)---红外光电避障传感器模块4

雕爷学编程,Arduino动手做,开源硬件,创客传感器,红外光电避障传感器模块

雕爷学编程 2503

Linux——内核——进程管理

本文系统介绍了Linux进程管理的核心内容,包括进程的基本概念(定义、状态)和关键管理命令(ps、top、kill等)。详细阐述了进程创建、调度、监控及终止等操作流程,以及进程间通信机制和常用管理工具(systemctl、screen等)。内容涵盖进程全生命周期管理,为Linux系统管理员提供全面的操作指南。

m0_65153260的博客 569

OSError We couldn‘t connect to https://huggingface.co to load file, couldn‘t find it chatglm3-6b解决方案

本文主要介绍了OSError: We couldn’t connect to https://huggingface.co to load this file, couldn’t find it in the cached files and it looks like THUDM/chatglm3-6b is not the path to a directory containing a file named config.json.解决方案,希望能对学习python的同学们有所帮助。

weixin_43178406的博客 5万+

linux进程管理

Linux进程管理 Linux实现进程管理 在linux中每个执行的程序都称为一个进程。每个进程都分配一个ID号 每一个进程都会对应一个父进程,这个父进程可以复制多个子进程 每个进程都可以以两种方式存在: 前台和后台 一般系统的服务都是以后台进程的方式存在 Ps命令 相关字段: PID 进程识别号 TTY 终端机号 TIME 此进程所消耗的CPU时间 CMD 正在执行的命令或进程名 ps -a 显示当前终端的所有进程信息 Ps -u 以用户的格式显示进程信息 Ps -x 显示后台运行的参数 相关例子 Ps

qq_51088445的博客 6673

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Linux 进程管理

作者:北南南北来自:LinuxSir.Org摘要:本文讲述的时进程管理的基本概念和进程管理工具介绍;文中的重点对进程管理工具的分类介绍及应用举例,包括 ps、pgrep、top 、kill、pkill、killall、nice和renice 等工具。 目录 1、程序和进程; 1.1 进程分类;1.2 进程的属性;1.3 父进程和子进程; 2、进程管理; 2.1 ps 监视进程工具...

weixin_33843409的博客 239

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

linux进程管理,Linux进程管理优秀教程

Linux进程管理优秀教程Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用计算机系统;多任务是指Linux可以同时执行几个任务,它可以在还未执行完一个任务时又执行另一项任务。以下是小编为大家搜索整理的Linux进程管理优秀教程,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网!在Linux系统上所有运行的'东西都可以称之为一个进程。每个用户任务、每个系统...

weixin_39711914的博客 185

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

深入解析 Linux 进程管理

深入学习进程相关知识,包括概念、状态、创建、特殊进程情况、调度、优先级、特性以及环境变量与相关指令、函数等。

Edison's 小宇宙 7万+

Linux中的进程管理

进程的调度启动可以通过 at、crontab 命令进行设置,其中 at 命令用于设置一次性(如12:15 时重启网络服务)计划任务,crontab 命令用于设置周期性运行(如每周五 17:30 备份数据库)的计划任务。启动后台进程需要使用“&”操作符,将“&”操作符放在要执行命令的最后面,进程启动后会直接放入后台运行,而不占用前台的命令操作界面,方便用户进行其他操作。在 Linux 中,进程是系统中所有任务的核心,进程管理命令主要用于查看、控制和调度系统中的进程。这个命令可以帮助你快速找到之前运行的命令。

xiaozhenghahaha的博客 785

linux进程管理和调度

进程:是正在运行的程序的实例,是操作系统进行资源分配和调度的基本单位。进程ID(PID):每个进程都有一个唯一的标识符,称为进程ID。

weixin_42300449的博客 865
上一篇: 【Linux】权限
下一篇: 【GitHub】Failed to connect to github.com port 443 的一种解决方案
CoderSharry
博客等级 码龄4年 515粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值