爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      Linux平台下的进程地址空间

      首页 知识中心 其他 文章详情页

      Linux平台下的进程地址空间

      2024-10-21 09:46:02 阅读次数:24

      地址,环境变量,进程

      “地址空间”

      在之前讨论C++内存管理,以及平常写C/C++程序时,有如下的存储空间布局:

      Linux平台下的进程地址空间

      虽然不是所有的实例都按照上图所示的分区排布,但这是一种最典型的做法,足以说明问题。这个示意图与在C++内存管理中所示的相似,但还是需要说明一下:(方便起见,暂时将这个空间称为程序的“地址空间”)

      • 在32位机器下,地址空间的范围是[0, 232),这是由地址总线排列组合的范围决定的。
      • 地址空间被大体划分为两个部分:内核空间和用户空间。内核空间存放了操作系统内核相关的数据和信息,用户无法访问内核空间。
      • 栈。临时变量,以及函数调用时所需要保存的信息都存放在此段。栈是向下增长的,栈具有FILO的性质。栈的空间一般较小。
      • 堆。通常在此段中进行动态内存分配。堆的可用空间一般较大。
      • 正文代码。代码部分是只读的,不允许用户修改。
      • 未初始化数据段。此段保存未初始化的全局数据与静态数据。与初始化的数据不同的是,未初始化数据段内容不存放在磁盘中,这是因为其中的数据会被内核同意设置为0。需要存放在磁盘中的只有代码段和初始化数据段。
      • 对于命令行参数和环境变量区域,在下文进行详细讨论。

      了解了上述的地址空间后,进行代码测试如下:

      /*
      *代码 1.1
      *平台:centos7.6 x86_64
      */
      #include <stdio.h>
      #include <stdlib.h>
      
      int global_init_var1 = 10;
      int global_init_var2 = 20;
      int global_init_var3 = 30;
      
      int global_uninit_var1;
      int global_uninit_var2;
      
      int main()
      {
        int st_var1 = 10;
        int st_var2 = 20;
        int st_var3 = 20;
        
        int* hp_var1 = (int*)malloc(sizeof(int));
        int* hp_var2 = (int*)malloc(sizeof(int));
        int* hp_var3 = (int*)malloc(sizeof(int));
      
        printf(" \
            global_init_var1: %p\n \
            global_init_var2: %p\n \
            global_init_var3: %p\n \
            global_uninit_var1: %p\n \
            global_uninit_var2: %p\n \
            st_var1: %p\n \
            st_var2: %p\n \
            st_var3: %p\n \
            hp_var1: %p\n \
            hp_var2: %p\n \
            hp_var3: %p\n",
            &global_init_var1, &global_init_var2, &global_init_var3, &global_uninit_var1, &global_uninit_var2, 
            &st_var1, &st_var2, &st_var3,
            hp_var1, hp_var2, hp_var3);
      
        return 0;
      }

      运行结果为:

      Linux平台下的进程地址空间

      将输出的地址大致映射到地址空间:

      Linux平台下的进程地址空间

      虽然具体的输出情况在不同的平台下会有所不同,但是通过观察现象,可以验证我们所做的说明是正确的。

      虽然已经了解了“地址空间”空间划分情况,但是这个”地址空间”到底是什么,我们并不清楚。编写下面的代码并运行,观察现象:

      /*
      *代码 1.2
      */
      #include <stdio.h>
      #include <unistd.h>
      #include <sys/types.h>
      #include <sys/wait.h>
      #include <stdlib.h>
      
      int main()
      {
        int var = 10;
        printf("father: the value of var:%d the address of var:%p\n", var, &var);
        pid_t id = fork(); 
        if(id < 0) { perror("fork err"); exit(1); }
        else if(id == 0)
        {
          var = 20;
          printf("child: the value of var:%d the address of var:%p\n", var, &var);
        }
        else 
        {
          int status = 0;
          waitpid(id, &status, 0);
        }
        return 0;
      }

      运行结果为:

      Linux平台下的进程地址空间

      我们看到了这样的现象:

      • 父进程和子进程的var变量的值不相等。这很好理解,子进程被创建后,与父进程共用代码部分和数据部分,直到子进程对变量进行修改,此时进行写时拷贝,为子进程另外创建一块空间单独存储 var 变量,并对 var 进行修改。
      • 父进程和子进程的var变量的地址相同。令人费解!毋庸置疑的是,子进程已经对父进程的变量 var 进行了写时拷贝,即此时父进程的 var 变量与子进程的 var 变量分别占据不同的空间,但是输出的二者的地址却相同,唯一的解释是:程序所输出的地址,是一个“虚拟”的地址。也就是说,我们之前讨论的“地址空间”,其中的地址其实并不是真实的物理地址,因为如果是物理地址,绝对不可能存在两个不同的值占据同一个位置的情况。我们称这个虚拟的地址为线性地址(linear address)。

      在C/C++语言中,我们所看到的地址全部都是线性地址(虚拟地址)。在现代操作系统中,用户无法看到真实的物理地址,物理地址由操作系统进行统一管理,同时,操作系统负责将虚拟地址转化为物理地址。

      进程地址空间

      之前所称“程序的地址空间”,准确应该称为进程地址空间(process address space)。进程地址空间是从某个最小值的存储位置(通常是0)到某个最大值的存储位置的列表。在进程地址空间中,进程可以进行读写。进程地址空间中存放有可执行程序的代码、数据以及程序的堆栈。在本质上,进程地址空间是地址总线排列组合形成的地址范围(32位机器下为[0, 232)),是进程可以引用的地址的集合。同时我们知道,这些地址都是虚拟地址。

      进程地址空间是与每个进程都相关的,每个进程都有一个自己的进程地址空间,并且独立于其他进程的地址空间(一些需要进程共享地址空间的特殊情况除外)。在内核层面,进程地址空间被操作系统抽象为一个mm_struct结构体,这个结构体中记录了进程地址空间的分区情况等信息。在进程的 task_struct 结构体中,包含了一个struct mm_struct*指针,这个指针即指向了进程所对应的 mm_struct 结构体。

      /*
      *代码 2.1
      linux-2.6.1\linux-2.6.1\include\linux\sched.h
      */
      struct task_struct {
        /*…………*/
        
        //task_struct中的mm_struct指针
        struct mm_struct *mm, *active_mm;
        
        /*…………*/
      };

      进程地址空间的区域划分

      进程地址空间的区域划分,即是我们已经所理解的,对未初始化全局数据、已初始化数据以及堆栈等的区域划分。在代码层面,“区域”本质是用“边界”来描述的,即描述一块区域,只需要描述这块区域的边界即可;而调整区域的大小,即是调整边界的位置。同时,一块区域中的任何地方,拥有者都是可以自由访问和使用的。

      /*
      *代码 2.2
      linux-2.6.1\linux-2.6.1\include\linux\sched.h
      */
      struct mm_struct {
        /*…………*/
        
        //mm_struct中对区域的划分
        unsigned long start_code, end_code, start_data, end_data;
        unsigned long start_brk, brk, start_stack;
        unsigned long arg_start, arg_end, env_start, env_end;
        unsigned long rss, total_vm, locked_vm;
        unsigned long def_flags;
        cpumask_t cpu_vm_mask;
        
        /*…………*/
      };

      页表概述、缺页中断概述和cr3寄存器

      现在对代码1.2运行过程中,操作系统的行为做一分析。先单独看父进程与物理内存之间的关系:

      Linux平台下的进程地址空间

      如上文所说,父进程 task_struct 中的 mm_struct 指针指向了父进程的进程地址空间(的抽象),进程地址空间中有 val 的虚拟地址。val 的虚拟地址,包括进程地址空间中用户区的其他区域的虚拟地址,都通过页表(page table)映射到物理内存的物理地址。

      关于页表的更多内容,将在内存管理部分进行详细讨论,这里只针对相关部分进行说明。页表中大致有以下内容:

      • 进程地址空间的虚拟地址 - 物理内存的物理地址的映射。虚拟地址通过页表和MMU找到物理内存中对象的实际存储位置。
      • 内存中数据的访问权限标志位。针对对内存的越权操作,会被页表拦截。在进程运行时,父、子进程的数据区的页表项权限会被修改为只读,一旦某个进程要对数据进行修改,此时不做异常处理,而是另外申请物理内存完成写时拷贝,完成后,将父、子进程数据区的页表项权限修改为可写。
      • 存在(exist)标志位。在运行一个程序时,程序的代码和数据并非全部加载到物理内存中,页表可以对虚拟内存进行标记,如果需要用到某些代码和数据,而对虚拟内存的标记显示这些代码和数据不在内存中,就会触发缺页中断(page fault),此时操作系统便会将对应的代码和数据加载到内存中。写时拷贝本质属于一种缺页中断。

      每个进程都有自己的页表,每个进程的页表是相互独立的。页表是由cr3寄存器进行维护的。cr3是CPU中的一个寄存器,它记录了当前正在运行的进程的页表的起始地址。一个进程的页表本质属于进程的上下文,当进程结束时,cr3中的地址会以进程上下文的形式被进程带走。

      承上,当 fork() 子进程时,子进程会拷贝父进程的task_struct、mm_struct和页表,此时子进程被创建:

      Linux平台下的进程地址空间

      由于子进程的各种内核数据结构都拷贝自父进程,所以父、子进程的 val 的虚拟地址,以及虚拟地址由页表映射到的物理地址都是相同的。当子进程尝试对val 的值进程修改时,操作系统会进行写时拷贝,在物理空间额外开一块内存,将数据拷贝到新空间,并将新的物理地址填入子进程的页表中,页表中的虚拟地址不变。写时拷贝完成后,子进程可以通过虚拟地址和页表找到新的物理地址,对值进行修改。这个过程对进程的地址空间和页表中的虚拟地址部分而言是0感知的,虚拟地址不关心这个过程。

      完成上述过程后,父、子进程内核结构分布大概如下:

      Linux平台下的进程地址空间

      至此,已经可以解释代码1.2的运行结果中,输出的父、子进程的 val 地址相同的原因:操作系统进行写时拷贝后,只是修改了页表中的物理地址部分,写时拷贝对于虚拟地址来说是0感知的,所以子进程val的虚拟地址仍然与父进程相同,而且我们所看到的只能是虚拟地址,所以输出的val的地址相同。

      进程地址空间的意义

      理解地址空间后,现在对进程地址空间的意义做一总结:

      • 进程地址空间可以让进程以统一的视角看待内存。
      • 访问内存时,增加一个转换的过程,在这个转换过程中,由于有进程地址空间区域划分的存在,可以针对用户的越界寻址进行检查和非法拦截。
      • 进程地址空间和页表的存在,将进程管理模块与内存管理模块进行了解耦。

      Linux平台下的进程地址空间

      环境变量

      这里首先在使用和命令层面讨论环境变量,再在代码以及进程管理层面讨论环境变量。

      环境变量概述和查看

      变量就是以一组文字或符号等,来替换一些设置或一串保留的数据。

      Linux平台下的进程地址空间

      环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。环境变量通常具有某些特殊用途,环境变量在系统中具有全局属性。

      使用env命令查看系统中的所有环境变量:

      [@shr Thu Nov 09 21:48:37 mail]$ env
      #......
      HOSTNAME=VM-24-8-centos
      TERM=xterm
      SHELL=/bin/bash
      HISTSIZE=3000
      #......
      SSH_TTY=/dev/pts/1
      USER=shr
      #......
      MAIL=/var/spool/mail/shr
      PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/shr/.local/bin:/home/shr/bin
      PWD=/var/spool/mail
      LANG=en_US.utf8
      SHLVL=1
      HOME=/home/shr
      LOGNAME=shr
      #......
      XDG_RUNTIME_DIR=/run/user/1001
      HISTTIMEFORMAT=%F %T 
      _=/usr/bin/env
      OLDPWD=/home/shr

      一些常见的环境变量有:

      • HOME 代表用户的家目录。使用cd ~命令时,就是使用这个变量进入对应的目录。
      • PATH 指明了指定命令的查找路径,目录与目录之间以冒号( : )隔开。
      • SHELL 记录了当前使用的shell是哪个程序。
      • LANG 记录了语系数据。

      环境变量相关命令和接口

      关于环境变量的常用命令有:

      • echo 显示某个环境变量值 : echo $PATH
      • env 显示所有环境变量
      • export 新增一个环境变量
      • unset 清除一个环境变量
      • set 显示所有环境变量和本地定义的shell变量

      在C/C++代码层面,有两种方式获取环境变量:

      • main()函数的第三个参数。main()函数的参数有两张表:命令行参数表和环境变量表,环境变量表以NULL结束。这两张表是由操作系统维护的,进程被创建时,这两张表会被加载。
      /*
      代码 3.1
      */
      #include <stdio.h>
      
      int main(int argc, char* argv[], char* env[])
      {
        for(int i = 0; env[i]; ++i) {
          printf("%s\n", env[i]);
        }
        return 0;
      }
      • 第三方变量environ。libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时要用extern声明。
      /*
      代码 3.2
      */
      #include <stdio.h>
      
      int main()
      {
        extern char** environ;
        for(int i = 0; environ[i]; ++i) {
          printf("%s\n", environ[i]);
        }
        return 0;
      }

      在C/C++中,可以使用getenv(3)和putenv(3)获取环境变量的内容和设置环境变量:

      /*
      代码 3.3
      #include <stdlib.h>
      char *getenv(const char *name);
      */
      
      #include <stdio.h>
      #include <stdlib.h>
      int main()
      {
        putenv("NUM=9999");
        printf("PATH:%s\n", getenv("PATH"));
        printf("NUM:%s\n", getenv("NUM"));
        return 0;
      }

      关于 getenv 和 putenv 的行为会在下文讨论。

      环境变量的传递性

      正如在开篇所说的,进程地址空间中专门有一个区域用来存放当前进程的环境变量。承上,环境变量具有全局属性,即环境变量会被所有的子进程继承,环境变量在子进程被创建时就已经存在。每个进程都会收到一张环境变量表,环境变量表是一个字符指针数组,每个指针指向一个以'\0'为结尾的环境字符串,这即是环境变量在进程中的组织形式。

      Linux平台下的进程地址空间

      /*
      代码 3.4
      */
      int main()
      {
        putenv("NUM=9999"); //父进程设置一个环境变量
        pid_t id = fork();
        if(id < 0) { perror("fork err"); exit(1); }
        else if(id == 0)
        {
          printf("NUM=%s\n", getenv("NUM")); //子进程获取新的环境变量
          exit(0);
        }
        else
        {
          int status = 0;
          waitpid(id, &status, 0);
          exit(0);
        }
        return 0;
      }

      在用户层面,用户启动的进程都是shell的子进程,所以用户的环境变量表是从shell进程继承而来的。当用户登录时,系统会启动一个shell进程,shell会读取用户目录下的.bash_profile文件,里面保存了导入环境变量的方式,shell的环境变量表就此而来。

      在进程地址空间中,环境变量的存储和组织可以抽象为如下结构:

      Linux平台下的进程地址空间

      可见,环境变量的实际存储区域与 env[] 是分开的。当使用 getenv 获取环境变量的内容时,会以 env[] 为中转,在存储区域拿到实际的环境变量字符串的内容。同理,当使用 putenv 设置环境变量时,只会将字符串指针放入 env[],当字符串实际内容发生变化时,通过 getenv 拿到的对应的环境变量也会不同。

      int main()
      {
        char envVal[256] = "NUM=9999";
        putenv(envVal);
        printf("envVal:%s\n", getenv("NUM"));
        strcpy(envVal, "NUM=114514");
        //envVal的内容发生变化,通过getenv拿到的内容也会变化
        printf("envVal:%s\n", getenv("NUM"));
        return 0;
      }

      Linux平台下的进程地址空间

      反观进程

      linux下的进程概念

      至此,我们对进程有了更深刻的让认识,即 进程 = 进程的内核数据结构 + 代码和数据,其中已经谈到的内核数据结构有 task_struct, mm_struct 和 page table,在后续的讨论中,会接触到更多的关于进程的内核数据结构。

      在Linux中,各模块的解耦是必要的,但是作为一个庞大的系统,会不可避免地存在耦合部分,这点在后续的讨论中也会体现。

      如何做到进程的独立性?

      各个进程是独立的:

      • 首先,各个进程的内核数据结构是独立的,每个进程都有一套属于自己的内核数据结构体系(内核数据结构终归也是在物理内存中存储的)。
      • 在物理内存中,各个进程的代码和数据是独立的,页表的存在使进程不必关心具体的物理内存分布细节。即使进程地址空间中的虚拟地址相同,只要页表将其映射到物理内存不同的位置,进程之间就不会相互干扰。
      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/158SHI/8303700,作者:158SHI,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:函数递归经典问题

      下一篇:CentOS8下安装并使用AWVS专业Web漏洞扫描

      相关文章

      2025-05-19 09:04:44

      地址与指针

      地址与指针

      2025-05-19 09:04:44
      char , 地址 , 指向
      2025-05-16 09:15:24

      WCF 配置文件分解

      WCF 配置文件分解

      2025-05-16 09:15:24
      localhost , WCF , 地址 , 服务 , 配置
      2025-05-16 09:15:10

      Linux系统基础-进程信号超详细讲解

      Linux系统基础-进程信号超详细讲解

      2025-05-16 09:15:10
      kill , 信号 , 命令 , 进程
      2025-05-14 10:33:31

      计算机小白的成长历程——数组(1)

      计算机小白的成长历程——数组(1)

      2025-05-14 10:33:31
      strlen , 个数 , 元素 , 内存 , 十六进制 , 地址 , 数组
      2025-05-14 10:33:25

      超级好用的C++实用库之网络

      在网络相关的项目中,我们经常需要去获取和设置设备的IP地址、子网掩码、网关地址、MAC地址等信息。这些信息一般与操作系统相关,在Windows系统和Linux系统上调用的接口是不一样的。

      2025-05-14 10:33:25
      Linux , 参数 , 地址 , 接口 , 网卡 , 返回值
      2025-05-14 10:02:58

      Linux top 命令使用教程

      Linux top 是一个在Linux和其他类Unix 系统上常用的实时系统监控工具。它提供了一个动态的、交互式的实时视图,显示系统的整体性能信息以及正在运行的进程的相关信息。

      2025-05-14 10:02:58
      CPU , 信息 , 内存 , 占用 , 备注 , 进程
      2025-05-14 09:51:21

      python向IP地址发送字符串

      在Python中,向IP地址发送字符串通常意味着你需要通过某种协议来实现通信。最常见的协议包括TCP和UDP。这里,我将分别给出使用TCP和UDP协议向指定IP地址发送字符串的示例代码。

      2025-05-14 09:51:21
      TCP , UDP , 协议 , 地址 , 示例 , 端口
      2025-05-13 09:53:13

      计算机萌新的成长历程18——指针

      计算机要存储数据的话有以下几种途径,按访问速度由快到慢来排列分别是:寄存器>高速缓存>内存>硬盘。它们的存储空间大小是依次增大的,寄存器的存储空间大小最小,硬盘存储空间大小最大。

      2025-05-13 09:53:13
      内存 , 变量 , 地址 , 寄存器 , 指针
      2025-05-13 09:51:29

      ogg在启动应用进程时报错OGG-00412

      ogg在启动应用进程时报错OGG-00412

      2025-05-13 09:51:29
      ogg , OGG , 时报 , 进程
      2025-05-13 09:51:17

      无法启动ogg配置好的抓取以及投递进程

      无法启动ogg配置好的抓取以及投递进程

      2025-05-13 09:51:17
      ogg , 启动 , 抓取 , 进程
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5255933

      查看更多

      最新文章

      地址与指针

      2025-05-19 09:04:44

      ogg在启动应用进程时报错OGG-00412

      2025-05-13 09:51:29

      复原 IP 地址

      2025-05-12 08:45:17

      【Linux 从基础到进阶】进程管理与性能调优

      2025-05-09 08:51:09

      MFC如何打开和关闭进程、动态获取进程号、关闭自身进程

      2025-05-07 09:08:16

      【网络工程】IP地址基础01

      2025-05-06 09:20:29

      查看更多

      热门文章

      Linux进程间通信

      2023-05-23 09:46:32

      【Linux】ps -ef|grep详解

      2023-05-18 09:34:04

      Node.js:cross-env跨平台设置和使用环境变量

      2023-02-23 07:38:36

      Linux命令之终止进程kill

      2023-05-26 10:27:33

      网络基础概念(IP、MAC、网关、子网掩码)

      2023-06-25 07:03:11

      特殊权限

      2023-06-25 07:17:17

      查看更多

      热门标签

      linux java python javascript 数组 前端 docker Linux vue 函数 shell git 节点 容器 示例
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      win查找被占用端口

      SQL Server 查询死锁以及解决死锁的基本知识(图文)

      Linux 与 Windows【管道符】查看指定进程

      网络基础概念(IP、MAC、网关、子网掩码)

      【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系

      MFC如何打开和关闭进程、动态获取进程号、关闭自身进程

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号