行业知识
【Linux】环境变量和进程优先级
���录
环境变量
什么是环境变量
系统结构
系统接口
深度解析
命令行参数
进程优先级
优先级查看
优先级修改
进程间的概念
环境变量
什么是环境变量
平时在使用 Linux 的时候,总会使用 ls 、pwd 这类的命令,我们也都知道这些命令也是 C 语言写的,但是为什么我们自己写的可执行程序需要加上 ./ 才能运行?
这是因为一些在操作系统中用来指定操作系统运行环境的一些参数已经被存储到了环境变量表中。
这些特定的人在特定的场景中被使用的变量就叫环境变量。
我们可以通过 env 来查看整张环境变量表。
env
其中我们可以看到
PATH : 指定命令的搜索路径
HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
USER : 当前用户名
之后可以使用 echo + $ + 环境变量名 ,查看变量的内容。
echo $USER //这里查看用户名这个环境变量
这里的 $ 可以理解成使用指针时的 * ,因为若直接使用 echo 打印,则会输出输入的字符串。
也可以使用 set 查看本地变量和环境变量,且内容相较于环境变量多了许多。
又绕回一开始的问题,我们若想直接用文件名运行程序该怎么办呢?其中的奥秘就在这个 PATH 之中。
看这一串路径是否有些眼熟?我们平时使用的命令就存在这些路径下。
PATH 中存的便是指定命令的搜索路径,因此若想直接用文件名运行程序,就需要让操作系统能够找到我们这个程序。
现有两种方法能够实现这个操作,其一便是将我们想要直接运行的文件直接拷贝到当前 PATH 的路径下。
其二则是将目标文件所在的路径加入到 PATH 路径下。
我们可以使用 export 定义或修改环境变量。
export 环境变量名=变量中的内容
像这样我们便定义了一个环境变量,并且能够在环境变量表之中找到。
有了这个命令那么我们就能够将我们文件的路径加入到 PATH 之中了,但是千万不能直接像这样使用。
export PATH=/home/Alpaca/linux-code-library/text.4.18/environ (文件所在路径)
否则便会像如上这样,我们甚至无法找到系统自带的命令,但是确实是能够直接运行自己的程序。
若真的将自己的 PATH 整个改掉的话,不要慌张,重新连接一次服务器即可。
实际上需要这样写,就能将我们当前路径追加到 PATH 之中。
export PATH=$PATH:/home/Alpaca/linux-code-library/text.4.18/environ (文件所在路径)
如此我们便能够直接使用文件名来运行自己的代码了。
系统结构
虽然我们成功将我们当前的路径插入到了环境变量之中,但是只要我们关闭连接,再次打开后便会发现,我们的环境变量又恢复了原样。
因为我们的环境变量就存在环境变量表中,所以每次我们添加新的环境变量就相当于往这个表中插入数据。
而环境变量表本质就是内存级的一张表,这张表在用户登录系统的时候,系统便会给用户生成一张属于自己的环境变量表。
那环境变量所对应的数据都是从哪来的呢?我们可以看看 /etc 路径下的 bashrc 文件,便能观察到一系列环境变量是如何配置的。
而系统也正是执行这些特定的配置文件,进而配置当前用户的环境变量表。
正因为每个用户的环境变量都是独有一份,因此可以通过对用户名环境变量的检测来进行权限的限制。不仅如此,环境变量还可以被相关的子进程继承下去。
系统接口
系统给我们提供了一个接口 (getenv( )) 供我们访问环境变量。根据 man 手册我们可以知道,我们需要给这个函数一个变量名,之后它便会在环境变量表之中进行查找。找到便返回指向目标内容的指针,反之则返回空指针。
我们便很容易写出这样的代码。
#include#include#include#includeint main(){ char* p = getenv("PWD"); std::cout
上一篇:luna服务器怎么变更?
下一篇:怎么禁止连服务器网络?