(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

相关文章

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

Redis在windows环境下如何启动

《Redis在windows环境下如何启动》:本文主要介绍Redis在windows环境下如何启动的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis在Windows环境下启动1.在redis的安装目录下2.输入·redis-server.exe

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

Spring Boot3虚拟线程的使用步骤详解

《SpringBoot3虚拟线程的使用步骤详解》虚拟线程是Java19中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,:本文主要介绍SpringBoot3虚拟线程的使用步骤,... 目录问题根源分析解决方案验证验证实验实验1:未启用keep-alive实验2:启用keep-alive扩展建

Java终止正在运行的线程的三种方法

《Java终止正在运行的线程的三种方法》停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作,停止一个线程可以用Thread.stop()方法,但最好不要用它,本文给大家介绍了... 目录前言1. 停止不了的线程2. 判断线程是否停止状态3. 能停止的线程–异常法4. 在沉睡中停止5