当前位置: 首页 > news >正文

Linux进程概念—环境变量

Linux进程概念—环境变量

  • 1.孤儿进程
  • 2.环境变量
    • 2.1常见环境变量
    • 2.2查看环境变量方法
    • 2.3在环境变量中添加
    • 2.4和环境变量相关的命令
    • 2.5环境变量的组织方式
    • 2.6命令行参数

🌟🌟hello,各位读者大大们你们好呀🌟🌟
🚀🚀系列专栏:【Linux的学习】
📝📝本篇内容:孤儿进程;环境变量
⬆⬆⬆⬆上一篇:string类(下)
💖💖作者简介:轩情吖,请多多指教(> •̀֊•́ ) ̖́-

1.孤儿进程

父进程退出,子进程会被OS自动领养(通过1号进程成为新的父进程),如果不领养会在后续子进程退出时,无人回收了
在这里插入图片描述

写一份代码如上
在这里插入图片描述
在makefile文件当中可以进行简写,$ @表示的是目标文件,也就是practice,$^表示的是依赖文件,也就是practice.c
在这里插入图片描述
在杀掉父进程后,子进程的父进程变成了1号进程

2.环境变量

环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数
环境变量在系统当中通常具有全局特性

2.1常见环境变量

PATH:指定命令的搜索路径
HOME:指定用户的主工作目录
SHELL:当前shell,它的值通常为/bin/bash

2.2查看环境变量方法

echo $NAME//NAME:你的环境变量名称
在这里插入图片描述

2.3在环境变量中添加

export PATH=$PATH:xxx
在这里插入图片描述
可以看见,把当前路径添加到PATH中后,可以直接运行practice程序,本质上添加到环境变量中后,当使用practice时,系统会去PATH中的路径下找对应的practice,并且因为有全局特性1,不在需要./

2.4和环境变量相关的命令

①echo:显示某个环境变量值
②export:设置一个新的环境变量
在这里插入图片描述
val还有其他的一些特性,具体的后面再讲
③env:显示所有的环境变量
在这里插入图片描述
④unset:清除环境变量
在这里插入图片描述
⑤set:显示本地定义的shell变量和环境变量
这个也有所涉及到后面的知识,后面再讲

2.5环境变量的组织方式

不知道大家有没有见过main函数的参数
int main(int argc,char* argv[],char* envp[])
每个程序都会收到一张环境变量表,环境变量表就是一个字符指针数组,每个指针指向一个以‘\0’结尾的环境字符串,其中envp就是一个字符指针数组,就是环境变量表
在这里插入图片描述
在这里插入图片描述
可以看到,把环境变量全部打印出来
还有一个方法是使用environ
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以说在使用时要用extern声明
在Linux中,把可执行程序,拷贝到系统默认路径下,让我们直接访问的方式相当于Linux下软件的安装。
在这里插入图片描述

也可以使用getenv系统调用来获取环境变量
在这里插入图片描述
环境变量本质就是一个内存级的一张表,这张表由用户登录系统的时候,进行给特定用户形成属于自己的环境变量表
每个环境变量都有自己的特定的应用场景
每一个元素都是kv的(有自己的名字和内容)
环境变量对应的数据从系统的相关配置文件中读取进来的(.bash_profile .bashrc)
环境变量通常是具有全局属性的,可以被子进程继承下去的
如果没有export,命令行定义的就是本地变量,只在shell内部有效,不会被子进程继承,使用export的目的是为了把变量放进环境变量表中,但是不管本地变量还是环境变量都被shell记录了下来
在这里插入图片描述
在这里插入图片描述
可以看到在命令行定义的变量使用env查看时并没有显示,但是使用export声明后,就能查看到在环境变量表中

2.6命令行参数

在这里插入图片描述

在这里插入图片描述
argv本质上也是一个表,由bash制作这个表,实际上就是为了方便使用命令行参数
举一个栗子来更好地理解它:
在这里插入图片描述
在这里插入图片描述
其本质上命令行上输入的就是一串字符串,一个是可执行程序,后面的就是参数选项,平常我们使用的命令以及命令选项都是这样实现的。

🌸🌸环境变量的知识大概就讲到这里啦,博主后续会继续更新更多Linux的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!你们的支持是博主坚持创作的动力!💪💪

http://www.lryc.cn/news/43146.html

相关文章:

  • 用JS+CSS打造你自己的弹幕王国,让网页动起来!
  • C++ LinuxWebServer 2万7千字的面经长文(上)
  • vue3 解决各场景 loading过度 ,避免白屏尴尬!
  • 基于sringboot和小程序实现高校食堂移动预约点餐系统演示【源码】
  • 开源操作系统与Windows大比拼!
  • RTL8201 以太网PHY芯片 调试记录
  • Java中Static关键字的五种用法详解
  • WebSocket 测试工具
  • 低代码开发的未来~
  • 蓝桥杯真题——模拟灌溉系统
  • 【数据结构】双向链表实现
  • 无公网IP,SSH远程连接Linux CentOS服务器【内网穿透】
  • CentOS 7+Docker搭建rabbitMQ无法访问15672端口
  • 面试官:如何保证接口幂等性?一口气说了9种方法!
  • 蓝桥杯刷题冲刺 | 倒计时14天
  • 【数据结构】树的概念
  • Qt Glog toStdWString转char* 中文乱码
  • 基于线性Kalman观测器(LKF)的2、4、7自由度悬架主动控制合集
  • 第二章 作业(6789B)【编译原理】
  • 【java】连续最大和、统计回文
  • AI真的快让我们失业了,从ChatGPT到Midjourney
  • JVM学习 GC垃圾回收机制 (堆内存结构、GC分类、四大垃圾回收算法)
  • ChatGPT 有哪些神奇的使用方式?
  • 【JavaEE】Java设计模式-单例模式(饿汉式与懒汉式)
  • (算法基础)朴素版Prim算法
  • 第十四届蓝桥杯三月真题刷题训练——第 23 天
  • 基于springboot实现医院信息管理系统【源码+论文】
  • CODESYS增量式PID功能块(ST完整源代码)
  • 代码质量提升,代码扫描 review 之 Codacy 工具使用
  • Centos Linux 正确安装 Redis 的方式