Linux之进程(三)(环境变量)

简介: Linux之进程(三)(环境变量)



一、基本概念

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。如:临时文件夹位置和系统文件夹位置等。环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。

二、环境变量

使用env命令可以查看当前系统中的所有环境变量。

1、PATH

要执行一个程序,那就需要先找到这个程序,怎么去找,这时候就需要带上路径,如我们经常使用的  ./  的方式。

再比如,我们使用的各种系统命令(ls, grep等),我们都知道其实它们是存在一些文件中的,我们在使用时也可以通过完整的路径去使用它们。但是运行一个程序能不能像使用命令那样只需要输入它的名字,就可以使它运行呢?

如下图:我们可以通过使用pwd的完整路径来使用pwd。

这时,我们就可以使用PATH来帮助我们。当要求操作系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到PATH中指定的路径去找。

所以,我们写的可执行程序无法像系统命令那样使用的根本原因就是其路径不在PATH环境变量所维护的搜索路径中。

如下图:我们常使用的各种系统命令就在PATH里的各种路径中。如:/usr/bin/pwd。

我们可以把可执行程序的路径添加到PATH中,就可以像系统命令一样使用了。如下:使用下面的命令添加。

export PATH=$PATH:路径

2、HOME

指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)

3、SHELL

当前Shell,它的值通常是/bin/bash。

和环境变量相关的命令

1、echo: 显示某个环境变量值

2、export: 设置一个新的环境变量

3、env: 显示所有环境变量

4、unset: 清除环境变量

5、set: 显示本地定义的shell变量和环境变量

三、环境变量参数

在前面的语法学习中,我们知道main函数也是存在命令行参数的,int argc 和 char* argv[]。但是事实上main函数有三个参数,还有一个就是环境变量参数 char* env[],它是用来获取环境变量的。

环境变量的组织方式:

env是一个指针数组,它里面的指针分别指向不同的环境变量对应的字符串。

通过getenv获取环境变量

通过代码获取环境变量

根据main的第三个参数来获取环境变量。

环境变量的全局性

环境变量是定义在系统中的变量,那它为什么在其他的进程中也有效呢?因为环境变量具有全局属性。

在命令行上运行./mytest_g的时候,bash是一个系统进程,mytest_g会变成一个进程,是bash的子进程,而环境变量具有全局属性的根本原因是会被子进程继承下去,因为环境变量定义给bash,而子进程会全部继承下去,这就被称为环境变量。所以环境变量具有全局性,而本地变量只会在当前进程有效。

四、argc和argv

上面我们讲了main函数的第三个环境变量参数,下面我们来讲一下前两个参数。这两个是命令行参数。

命令行参数实际上是把程序名和选项传递给argv的,选项多少就需要定义argv的大小。参数的意义在于可以通过命令行选项控制使其结果不同。

我们通过下面的代码来解释:

运行程序:

我们发现上面的和命令+选项的格式是一样的,那么这两者有什么关系吗?

其实命令后面所带的选项,就是通过命令行参数来实现的。进而通过不同的选项来实现不同的功能。

目录
相关文章
|
22天前
|
网络协议 Linux
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
99 2
|
22天前
|
Linux Python
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
40 2
|
26天前
|
消息中间件 Linux 开发者
Linux进程间通信秘籍:管道、消息队列、信号量,一文让你彻底解锁!
【8月更文挑战第25天】本文概述了Linux系统中常用的五种进程间通信(IPC)模式:管道、消息队列、信号量、共享内存与套接字。通过示例代码展示了每种模式的应用场景。了解这些IPC机制及其特点有助于开发者根据具体需求选择合适的通信方式,促进多进程间的高效协作。
52 3
|
24天前
|
消息中间件 Linux
Linux进程间通信
Linux进程间通信
32 1
|
25天前
|
C语言
Linux0.11 系统调用进程创建与执行(九)(下)
Linux0.11 系统调用进程创建与执行(九)
20 1
|
25天前
|
存储 Linux 索引
Linux0.11 系统调用进程创建与执行(九)(上)
Linux0.11 系统调用进程创建与执行(九)
38 1
|
6天前
|
存储 监控 安全
探究Linux操作系统的进程管理机制及其优化策略
本文旨在深入探讨Linux操作系统中的进程管理机制,包括进程调度、内存管理以及I/O管理等核心内容。通过对这些关键组件的分析,我们将揭示它们如何共同工作以提供稳定、高效的计算环境,并讨论可能的优化策略。
13 0
|
19天前
|
Unix Linux
linux中在进程之间传递文件描述符的实现方式
linux中在进程之间传递文件描述符的实现方式
|
20天前
|
开发者 API Windows
从怀旧到革新:看WinForms如何在保持向后兼容性的前提下,借助.NET新平台的力量实现自我进化与应用现代化,让经典桌面应用焕发第二春——我们的WinForms应用转型之路深度剖析
【8月更文挑战第31天】在Windows桌面应用开发中,Windows Forms(WinForms)依然是许多开发者的首选。尽管.NET Framework已演进至.NET 5 及更高版本,WinForms 仍作为核心组件保留,支持现有代码库的同时引入新特性。开发者可将项目迁移至.NET Core,享受性能提升和跨平台能力。迁移时需注意API变更,确保应用平稳过渡。通过自定义样式或第三方控件库,还可增强视觉效果。结合.NET新功能,WinForms 应用不仅能延续既有投资,还能焕发新生。 示例代码展示了如何在.NET Core中创建包含按钮和标签的基本窗口,实现简单的用户交互。
43 0
|
25天前
|
存储 Linux 调度
Linux0.11 进程切换(十)
Linux0.11 进程切换(十)
13 0