(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

相关文章

Java多线程父线程向子线程传值问题及解决

《Java多线程父线程向子线程传值问题及解决》文章总结了5种解决父子之间数据传递困扰的解决方案,包括ThreadLocal+TaskDecorator、UserUtils、CustomTaskDeco... 目录1 背景2 ThreadLocal+TaskDecorator3 RequestContextH

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

在Mysql环境下对数据进行增删改查的操作方法

《在Mysql环境下对数据进行增删改查的操作方法》本文介绍了在MySQL环境下对数据进行增删改查的基本操作,包括插入数据、修改数据、删除数据、数据查询(基本查询、连接查询、聚合函数查询、子查询)等,并... 目录一、插入数据:二、修改数据:三、删除数据:1、delete from 表名;2、truncate

异步线程traceId如何实现传递

《异步线程traceId如何实现传递》文章介绍了如何在异步请求中传递traceId,通过重写ThreadPoolTaskExecutor的方法和实现TaskDecorator接口来增强线程池,确保异步... 目录前言重写ThreadPoolTaskExecutor中方法线程池增强总结前言在日常问题排查中,

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

Linux之进程状态&&进程优先级详解

《Linux之进程状态&&进程优先级详解》文章介绍了操作系统中进程的状态,包括运行状态、阻塞状态和挂起状态,并详细解释了Linux下进程的具体状态及其管理,此外,文章还讨论了进程的优先级、查看和修改进... 目录一、操作系统的进程状态1.1运行状态1.2阻塞状态1.3挂起二、linux下具体的状态三、进程的

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d