1.環(huán)境變量
?首先一個(gè)問題:我寫的代碼(這個(gè)代碼很簡單,不用管)編譯之后運(yùn)行的時(shí)候?yàn)槭裁匆獛?/ ? 或者說我怎么才可以讓我不用帶./ ?
??.代表當(dāng)前文件下,/是文件分隔符,這是用相對路徑的方式來訪問,所以我們也可以用絕對路徑
myproc和ls都是指令,ls可以直接輸入,但是我們直接輸入myproc就不可以,只不過ls是納入了linux的常用指令
??原因:我們的默認(rèn)的程序在系統(tǒng)是會(huì)存在一個(gè)環(huán)境變量PATH,這個(gè)環(huán)境變量可以幫助我們通過該變量來在系統(tǒng)中在特定路徑下去搜索命令
1.0.環(huán)境變量是什么?
window系統(tǒng)也有環(huán)境變量
?main函數(shù)可以帶參嗎,最多帶幾個(gè)呢
??可以,常見是兩個(gè),最多是三個(gè)
??指針和指針變量是兩個(gè)概念
指針是地址,能表示地址都能叫指針;指針變量是一個(gè)變量開4個(gè)字節(jié)
envp是一個(gè)環(huán)境變量表:
?那么什么叫環(huán)境變量呢?
??本質(zhì)就是一個(gè)內(nèi)存級(jí)的一張表,這張表由用戶在登錄系統(tǒng)的時(shí)候,進(jìn)行給他特定用戶形成屬于自己的環(huán)境變量表環(huán)境變量中的每一個(gè),都有自己的用途,有的是進(jìn)行路徑查找到,有的是進(jìn)行身份認(rèn)證的,有的是進(jìn)行動(dòng)態(tài)庫查找的,有的是用來確認(rèn)當(dāng)前路徑等等,每一個(gè)環(huán)境變量都有自己的特定應(yīng)用場景,每一個(gè)元素都是kv結(jié)構(gòu)的
?那么環(huán)境變量對應(yīng)的數(shù)據(jù),都是從哪里來的呢???系統(tǒng)的相關(guān)配置文件中讀取進(jìn)來的
??.=source
.也是個(gè)命令,讓后面的配置文件立馬生效
argv就是一個(gè)表
1.1.環(huán)境變量PATH概念:
-
環(huán)境變量(environment variables)一般是指在操作系統(tǒng)中用來指定操作系統(tǒng)運(yùn)行環(huán)境的一些參數(shù)
-
如:我們在編寫C/C++代碼的時(shí)候,在鏈接的時(shí)候,從來不知道我們的所鏈接的動(dòng)態(tài)靜態(tài)庫在哪里,但
是照樣可以鏈接成功,生成可執(zhí)行程序,原因就是有相關(guān)環(huán)境變量幫助編譯器進(jìn)行查找。
-
環(huán)境變量通常具有某些特殊用途,還有在系統(tǒng)當(dāng)中通常具有全局特性
常見環(huán)境變量
PATH : 指定命令的搜索路徑
HOME : 指定用戶的主工作目錄(即用戶登陸到Linux系統(tǒng)中時(shí),默認(rèn)的目錄)
SHELL : 當(dāng)前Shell,它的值通常是/bin/bash。
環(huán)境變量的組織方式:
每個(gè)程序都會(huì)收到一張環(huán)境表,環(huán)境表是一個(gè)字符指針數(shù)組,每個(gè)指針指向一個(gè)以’\0’結(jié)尾的環(huán)境字符串
**??前置:**在 Linux 命令行中,我們也是可以定義變量的,命令行變量分為兩種:
- 普通變量
- 環(huán)境變量(具備全局屬性)
1.2.查看環(huán)境變量方法
??查看所有的環(huán)境變量:env
#include <stdio.h>
int main(int argc, char *argv[])
{
extern char **environ;
int i = 0;
for(; environ[i]; i++){
printf("%s\n", environ[i]);
}
return 0;
}
結(jié)果也是一樣的,
??libc中定義的全局變量environ指向環(huán)境變量表,environ沒有包含在任何頭文件中,所以在使用時(shí) 要用extern聲明。
??系統(tǒng)中存在一個(gè)環(huán)境變量path,但是我們要查看的話,echo $環(huán)境變量名
??.根本原因是ls會(huì)在我們特定的環(huán)境變量所知名的路徑中,而我們的可執(zhí)行程序并沒有在那個(gè)路徑中,需要我們指明路徑
環(huán)境變量 PATH
PATH中會(huì)承載多種路徑,中間用冒號(hào) ( : ) 作為分隔符。我們再執(zhí)行某一個(gè)程序時(shí),比如執(zhí)行 ls 時(shí),我們的系統(tǒng)識(shí)別到 ls 的輸入時(shí),會(huì)在上面路徑中逐個(gè)搜索,只要在特定的路徑下找到了 ls,就會(huì)執(zhí)行特定路徑下的 ls 并停止搜索。
換言之,PATH
PATH 就提供了環(huán)境變量,可執(zhí)行程序搜索的路徑。
??可以查指令的路徑:which 指令名
??設(shè)置一個(gè)新的環(huán)境變量:export 環(huán)境變量名=路徑
?那我們是不是可以試著把我們的程序加載到環(huán)境變量中呢???顯然是可以的啊
如果你想讓你的環(huán)境變量設(shè)置永久有效的話,是需要更改配置文件的,該配置文件在系統(tǒng)當(dāng)中,跟云服務(wù)器沒有關(guān)系。
??把一個(gè)環(huán)境變量加到配置文件中export 環(huán)境變量名=$PATH:路徑
在linux中,把可執(zhí)行程序,拷貝到系統(tǒng)默認(rèn)路徑下,讓我們直接訪問的方式——相當(dāng)于Linux下軟件的安裝!
export PATH=$PATH:/home/xiaolu/xiaolu_task/lesson2
!這里不是+號(hào)是等號(hào)
??清除環(huán)境變量:unset 環(huán)境變量名
??顯示本地定義的shell變量和環(huán)境變量:set
??環(huán)境變量可以通過函數(shù)獲?。篻etenv
char *user=getenv("USER");
7 if(user==NULL)perror("getenv");
8 else printf("USER:%s\n",user);
1.3.常見環(huán)境變量
我們先通過env查看一下所有的環(huán)境變量
不知道大家有沒有關(guān)注過,每次登陸服務(wù)器默認(rèn)所處的路徑?就是默認(rèn)所處的工作目錄。
root 用戶的工作目錄和普通用戶的工作目錄不同,那 Linux 是如何知道的呢?
- HOME:指定用戶的主工作目錄(即用戶登陸到 Linux 系統(tǒng)中時(shí),默認(rèn)的目錄)
- PWD:顯示當(dāng)前目錄。
- USER:顯示當(dāng)前誰在用系統(tǒng)
- SHELL:當(dāng)前用戶用的是哪種Shell。
??得益于 Linux 存在歷史命令的記錄功能,我們可以在 Xshell 里 ↑ ↓ 顯出歷史命令,就像這樣:
- HISTSIZE:保存歷史命令記錄的條數(shù)。
我們可以通過history指令去查看我們之前用的指令
- HOSTNAME:主機(jī)的名稱,應(yīng)用程序如果要用到主機(jī)名的話,通常是從這個(gè)環(huán)境變量中取得。
操作系統(tǒng)
- LANG/LANGUGE:和語言相關(guān)的環(huán)境變量,使用多種語言的用戶可以修改此環(huán)境變量。
1.4.特性總結(jié)
命令行中啟動(dòng)的進(jìn)程,父進(jìn)程全部都是 bash 。
環(huán)境變量是可以被所有的子進(jìn)程繼承的——所以環(huán)境變量有全局性
本地變量和環(huán)境變量的根本區(qū)別在于:改變量是否能被子進(jìn)程所繼承
本地變量只在shell內(nèi)部有效,不能被子進(jìn)程繼承
2.進(jìn)程優(yōu)先級(jí)
權(quán)限是能不能的問題,優(yōu)先級(jí)是誰先執(zhí)行的問題
?為什么會(huì)有優(yōu)先級(jí)???CPU資源有限
2.1.優(yōu)先級(jí)概念
-
cpu資源分配的先后順序,就是指進(jìn)程的優(yōu)先權(quán)(priority)。
-
優(yōu)先權(quán)高的進(jìn)程有優(yōu)先執(zhí)行權(quán)利。配置進(jìn)程優(yōu)先權(quán)對多任務(wù)環(huán)境的linux很有用,可以改善系統(tǒng)性能。
-
還可以把進(jìn)程運(yùn)行到指定的CPU上,這樣一來,把不重要的進(jìn)程安排到某個(gè)CPU,可以大大改善系統(tǒng)整
體性能
2.2查看進(jìn)程
??查看進(jìn)程的優(yōu)先級(jí): ps -l
我們很容易注意到其中的幾個(gè)重要信息,有下:
- UID : 代表執(zhí)行者的身份
- PID : 代表這個(gè)進(jìn)程的代號(hào)
- PPID :代表這個(gè)進(jìn)程是由哪個(gè)進(jìn)程發(fā)展衍生而來的,亦即父進(jìn)程的代號(hào)
- PRI :代表這個(gè)進(jìn)程可被執(zhí)行的優(yōu)先級(jí),其值越小越早被執(zhí)行
- NI :代表這個(gè)進(jìn)程的nice值
2.3.PRI and NI
PRI也還是比較好理解的,即進(jìn)程的優(yōu)先級(jí),或者通俗點(diǎn)說就是程序被CPU執(zhí)行的先后順序,此值越小,進(jìn)程的優(yōu)先級(jí)別越高
那NI呢?就是我們所要說的nice值了,其表示進(jìn)程可被執(zhí)行的優(yōu)先級(jí)的修正數(shù)值
- PRI值越小越快被執(zhí)行,那么加入nice值后,將會(huì)使得PRI變?yōu)椋篜RI(new)=PRI(old)+nice
- 這樣,當(dāng)nice值為負(fù)值的時(shí)候,那么該程序?qū)?huì)優(yōu)先級(jí)值將變小,即其優(yōu)先級(jí)會(huì)變高,則其越快被執(zhí)行
- 所以,調(diào)整進(jìn)程優(yōu)先級(jí),在Linux下,就是調(diào)整進(jìn)程nice值
- nice其取值范圍是-20至19,一共40個(gè)級(jí)別。
PRI代表當(dāng)前進(jìn)程的優(yōu)先級(jí) ni代表當(dāng)前進(jìn)程的優(yōu)先級(jí)修正數(shù)據(jù)
-
優(yōu)先級(jí)需要強(qiáng)調(diào)一點(diǎn)的是,進(jìn)程的nice值不是進(jìn)程的優(yōu)先級(jí),他們不是一個(gè)概念,但是進(jìn)程nice值會(huì)影響到進(jìn)
程的優(yōu)先級(jí)變化。
-
可以理解nice值是進(jìn)程優(yōu)先級(jí)的修正修正數(shù)據(jù)可以通過代碼來調(diào),也可以用指令,也可以用top
2.4.進(jìn)程優(yōu)先級(jí)的修改
??修改優(yōu)先級(jí):top+按r 輸入優(yōu)先級(jí)的數(shù)值
輸入pid,然后輸入ni值然后退出
我們假設(shè)給一號(hào)進(jìn)程 -20的nice值的話,會(huì)出現(xiàn)報(bào)錯(cuò)
如果你執(zhí)意修改,你須具備 超級(jí)用戶 的權(quán)限 —— 這里我們 sudo top
就行
值得強(qiáng)調(diào)的是,Linux 不允許用戶無節(jié)制地設(shè)置優(yōu)先級(jí),設(shè)置的優(yōu)先級(jí)范圍不能逾過下列區(qū)間:[-20,19]
**注意:**每次設(shè)置優(yōu)先級(jí),這個(gè) old 優(yōu)先級(jí)都會(huì)被恢復(fù)成為 80 (跟上一次沒關(guān)系)文章來源:http://www.zghlxwxcb.cn/news/detail-716906.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-716906.html
到了這里,關(guān)于【Linux進(jìn)行時(shí)】環(huán)境變量and進(jìn)程優(yōu)先級(jí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!