(3.7)进程与线程——进程环境

2024-06-08 07:18
文章标签 线程 环境 进程 3.7

本文主要是介绍(3.7)进程与线程——进程环境,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1.进程的内存空间布局
      • (1)内核空间PCB与用户空间
      • (2)用户空间的具体布局
    • 2.命令行参数
    • 3.环境变量表
    • 4.如何访问环境变量表?
    • 5.设置环境变量

1.进程的内存空间布局

(1)内核空间PCB与用户空间

  • 内核空间PCB

在这里插入图片描述

  • 用户空间
    在这里插入图片描述

(2)用户空间的具体布局

在这里插入图片描述

2.命令行参数

(1)

  • 命令就是可执行文件,紧跟着的参数,各种文件名等:都是命令行参数,向进程进行传递
  • eg:ls [参数] <路径或文件名>
    ls –l /home
  • mkdir [参数] <目录名>
    mkdir -p /home/xiaokun/src
  • cp [参数] <源文件路径> <目标文件路径>
    cp –r /usr/local/src /root

(2)eg

  • mian函数是进程的入口函数,argc:向进程所传递的命令行参数的个数,argv:向进程所传递的命令行参数本身,可以将其当作字符串数组
  • 注意:可执行文件名本身也作为命令行本身,传递给进程的命令行参数
#include<stdio.h>
int main(int argc, char **argv)
{int i;for (i=0;i<argc;i++)printf("Argument %d is %s./n", i, argv[i]);return 0'
}
  • 假如上述代码编译为hello.0,在命令行中执行:
  • hello.0 a b c d e
    在这里插入图片描述

3.环境变量表

  • 每个进程都会有自己的环境变量表(该表可以来自shell,也可以来自父进程的参数传递)
  • 通过全局的环境指针(environ)可以直接访问环境变量表(字符串数组)
头文件unistd.h
extern char **environ;
  • 环境变量字符串形式为“name=value”, name是环境变量名称, value为环境变量赋值
    在这里插入图片描述

4.如何访问环境变量表?

  • 获取环境变量的方法
    直接通过environ变量指针访问环境表
    使用getenv函数
  • getenv函数用于获取环境变量值
头文件: stdlib.h
char* getenv(const char *name);
指定环境变量名称,返回环境变量字符串指针,若未找到则返回空指针
  • eg:getenv(PATH),返回的是:PATH=:/bin:/usr/bin\0这个字符串

5.设置环境变量

  • 一般不会通过environ变量指针来修改,而是用下面的POSIX API
  • 设置环境变量的三种方法:
putenv
setenv
unsetenv
  • putenv函数将环境变量字符串放入环境变量表中;若该字符串已经存在,则覆盖
头文件: stdlib.h
int putenv(char *str);
  • setenv:指定环境变量的名称,然后查找对应的环境变量字符串,将name设置为value
头文件: stdlib.h
int setenv(const char* name,const char* value, int rewrite);
setenv将指定环境变量的值设置为参数指定值(更改环境变量字符串)若name已经存在
rewrite不等于0,则删除其原先的定义
rewrite等于0,则不删除其原先的定义
  • unsetenv
头文件: stdlib.h
int unsetenv(const char* name);
删除指定的环境变量字符串

这篇关于(3.7)进程与线程——进程环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1041508

相关文章

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

Java JUC并发集合详解之线程安全容器完全攻略

《JavaJUC并发集合详解之线程安全容器完全攻略》Java通过java.util.concurrent(JUC)包提供了一整套线程安全的并发容器,它们不仅是简单的同步包装,更是基于精妙并发算法构建... 目录一、为什么需要JUC并发集合?二、核心并发集合分类与详解三、选型指南:如何选择合适的并发容器?在多

C#使用SendMessage实现进程间通信的示例代码

《C#使用SendMessage实现进程间通信的示例代码》在软件开发中,进程间通信(IPC)是关键技术之一,C#通过调用WindowsAPI的SendMessage函数实现这一功能,本文将通过实例介绍... 目录第一章:SendMessage的底层原理揭秘第二章:构建跨进程通信桥梁2.1 定义通信协议2.2

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版