?????爆笑教程????《看表情包學(xué)Linux》???猛戳訂閱????
?
?? 寫在前面:我們先講解進(jìn)程的優(yōu)先級(jí),探討為什么會(huì)存在優(yōu)先級(jí),以及如何查看系統(tǒng)進(jìn)程、進(jìn)程優(yōu)先級(jí)的修改。然后講解進(jìn)程的切換,首次介紹進(jìn)程的競(jìng)爭(zhēng)性、獨(dú)立性,以及并行和并發(fā)的概念,在通過(guò)講解進(jìn)程搶占引出可見寄存器與不可見寄存器。最后我們講解環(huán)境變量,介紹環(huán)境變量 PATH,并且做一個(gè) "讓自己的可執(zhí)行程序不帶路徑也能執(zhí)行"的實(shí)踐,講解環(huán)境變量的到如何刪除,最后再講幾個(gè)常見的環(huán)境變量。
??????本篇博客全站熱榜排名:13
?Ⅰ. 進(jìn)程優(yōu)先級(jí)(Process Priority)
0x00 引入:什么是優(yōu)先級(jí)?
我們先思考思考?權(quán)限 是什么?權(quán)限的本質(zhì)是談?wù)?"能" 還是?"不能" 的問(wèn)題。
那什么是?優(yōu)先級(jí)???jī)?yōu)先級(jí)是進(jìn)程獲取資源的先后順序!
?
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)對(duì)多任務(wù)環(huán)境的 Linux 很有用,可以改善系統(tǒng)性能,還可以把進(jìn)程運(yùn)行到指定的 CPU 上,這樣一來(lái)就可以把不重要的進(jìn)程安排到某個(gè) CPU,可以大大改善系統(tǒng)整體性能。
0x02 為什么會(huì)存在優(yōu)先級(jí)?
我們不妨先思考下我們?nèi)粘I钪信抨?duì)的本質(zhì),排隊(duì)的本質(zhì)可以說(shuō)是 "確定優(yōu)先級(jí)" ,
而插隊(duì)行為就是更改優(yōu)先級(jí)。因?yàn)榕抨?duì)造就了優(yōu)先級(jí),那我們?yōu)槭裁匆抨?duì)?
?? 可以不排隊(duì)嗎?可以,結(jié)果就是大家一窩蜂搶唄,全部用搶的。
"無(wú)理由暴力搶占式,優(yōu)勝劣汰,我擠死你"
?
(前后時(shí)間來(lái)確認(rèn)先后順序)???(誰(shuí)能擠誰(shuí)能撞誰(shuí)就排到前面)
現(xiàn)實(shí)生活中一旦出現(xiàn)了搶,就難免會(huì)引發(fā)爭(zhēng)執(zhí)。
在比如說(shuō)食堂買飯如果大家都不排隊(duì),如果你就是擠不過(guò)別人,就會(huì)一直買不到,
你就每次都要餓肚子,這在操作系統(tǒng)中叫做 "饑餓問(wèn)題" 。
所以,排隊(duì)主要是換了一種競(jìng)爭(zhēng)方式,不以那么殘酷的方式競(jìng)爭(zhēng),讓進(jìn)程都能 井然有序 。
我們之所以要排隊(duì),其實(shí)最主要的原因是因?yàn)橘Y源不夠!
如果資源是無(wú)限的,就像希爾伯特旅館一樣,該旅館擁有無(wú)限多的房間,那也不需要排隊(duì)的了。
200 名學(xué)生要去食堂吃飯,但窗口就 20 個(gè),當(dāng)然需要排隊(duì)。如果窗口有 200 個(gè),理論上不用排。
因?yàn)?系統(tǒng)里面永遠(yuǎn)都是進(jìn)程占大多數(shù),資源是少數(shù)。?這就導(dǎo)致了進(jìn)程競(jìng)爭(zhēng)資源是常態(tài)!
排隊(duì)和進(jìn)程資源競(jìng)爭(zhēng)都是一定要確認(rèn)先后的,它們的本質(zhì)都是 確認(rèn)優(yōu)先級(jí) 。
本章我們要講的是 Linux 的進(jìn)程優(yōu)先級(jí),Linux 下的優(yōu)先級(jí)有很多方式,包括設(shè)置和修改。
我們不建議修改優(yōu)先級(jí),如果你不懂調(diào)度器的調(diào)度算法,你隨便修改優(yōu)先級(jí)其實(shí)就是變相地 "插隊(duì)" 了。你可以讓你的進(jìn)程盡快地得到了某種 CPU 資源或其它資源,凡是可能會(huì)打破調(diào)度器的平衡。其實(shí)你在用戶層再怎么設(shè)置,也不會(huì)對(duì)調(diào)度器的調(diào)度策略產(chǎn)生什么影響。
再加上設(shè)置優(yōu)先級(jí)沒(méi)有什么意義,所以本章我們就不去講解了。
0x03 查看系統(tǒng)進(jìn)程:ps -l
?? 查看系統(tǒng)進(jìn)程:在 Linux 或者 Unix 系統(tǒng)中,輸入? ps -l? 命令則會(huì)輸出內(nèi)容:
$ ps -l # 查看進(jìn)程的優(yōu)先級(jí)
?
我們寫一個(gè)簡(jiǎn)單的 Hello 程序,令其每隔一秒發(fā)送一次 Hello:
#include <stdio.h>
#include <unistd.h>
int main(void) {
while (1) {
sleep(1);
printf("Hello!\n");
}
}
我們把它運(yùn)行起來(lái),此時(shí)我們使用? ps -l? ?查看:
?
因?yàn)? ps -l??只能顯示當(dāng)前終端下進(jìn)程的相關(guān)信息,我們可以使用給它加上 ??選項(xiàng):
$ ps -la
??
此時(shí)我們的進(jìn)程 process 就顯示出來(lái)了,我們重點(diǎn)關(guān)注???和???列。
?Linux 中的進(jìn)程優(yōu)先級(jí)由兩部分組成:?
- ?:優(yōu)先級(jí) (priority),默認(rèn)進(jìn)程優(yōu)先級(jí)為??。
- ?:nice 值 (nice value) ,進(jìn)程優(yōu)先級(jí)的修正屬性,取值區(qū)間為???,默認(rèn)值為???。
?? 注意:數(shù)字越小,表示優(yōu)先級(jí)越高;數(shù)字越大,優(yōu)先級(jí)越低。(Linux 下)
優(yōu)先級(jí)的部分我們?cè)?task_struct 中也是可以找到的。
它的優(yōu)先級(jí)和我們上一章講的進(jìn)程狀態(tài)一樣,也是個(gè)整數(shù),在 task_struct 中表示:
?
0x04 進(jìn)程優(yōu)先級(jí)的修改
要更該進(jìn)程的優(yōu)先級(jí),需要更改的是??,而非???。
因?yàn)?nice 值是進(jìn)程優(yōu)先級(jí)的修正數(shù)據(jù),所以一個(gè)進(jìn)程不管是在啟動(dòng)前還是在運(yùn)行中,想要修改優(yōu)先級(jí),都是通過(guò)修改它的 nice 值來(lái)達(dá)到目的。
其實(shí),我們系統(tǒng)中是存在???nice? 命令的,對(duì)應(yīng)的還有???renice??。
$ nice
$ renice
它們可以讓我們?cè)趩?dòng)一個(gè)進(jìn)程時(shí)直接指定優(yōu)先級(jí),或者啟動(dòng)中或啟動(dòng)前設(shè)置優(yōu)先級(jí)。
感興趣可以自行查閱,我們還是主要學(xué)習(xí)如何使用 ??top? 命令去修改:
$ top
?
進(jìn)入 top 后我們鍵入???,此時(shí)會(huì)發(fā)出詢問(wèn):PID to renice [default pid=]
在后面輸入我們要修改的進(jìn)程的???即可,我們剛才進(jìn)程的???是??:
?
然后會(huì)詢問(wèn):PID to renice [default pid=1]?
,
問(wèn)你要設(shè)置哪個(gè)進(jìn)程的??:
?
這里居然提示??Failed?
?修改失敗了!Permission denied (么得權(quán)限) !
??因?yàn)槲覀儎偛耪f(shuō)過(guò):
"一個(gè)進(jìn)程的優(yōu)先級(jí)不能輕易被修改,因?yàn)闀?huì)打破調(diào)度器的平衡"
如果你執(zhí)意修改,你須具備 ???超級(jí)用戶 的權(quán)限 ——???!這里我們?sudo top?
就行:
$ sudo top
??
?
???找到了找到了,我們繼續(xù),我們繼續(xù)!
我們剛才將 nice 值修改為?-20,現(xiàn)在???優(yōu)先級(jí)變成 60 了。
值得強(qiáng)調(diào)的是,Linux 不允許用戶無(wú)節(jié)制地設(shè)置優(yōu)先級(jí),設(shè)置的優(yōu)先級(jí)范圍不能逾過(guò)下列區(qū)間:
?
其取值范圍是???至??,一共 40 個(gè)可設(shè)置級(jí)別。
??值越小越快被執(zhí)行,Linux 的優(yōu)先級(jí)是這樣設(shè)置的:
prio = prio_old + nice;
所以,只需要改 nice 優(yōu)先級(jí)就能變化。
?? 注意:每次設(shè)置優(yōu)先級(jí),這個(gè) old 優(yōu)先級(jí)都會(huì)被恢復(fù)成為 80 (跟上一次沒(méi)關(guān)系)
Ⅱ. 進(jìn)程的切換(Process Switch)
0x00 競(jìng)爭(zhēng)與獨(dú)立
競(jìng)爭(zhēng)性:僧多粥少!系統(tǒng)進(jìn)程數(shù)目眾多,而 CPU 資源只有少量,甚至一個(gè),所以進(jìn)程之間是具有競(jìng)爭(zhēng)屬性的。為了高效的完成任務(wù)、更合理競(jìng)爭(zhēng)相關(guān)資源,便具有了優(yōu)先級(jí)。
獨(dú)立性:多進(jìn)程運(yùn)行,需要獨(dú)享各種資源,多進(jìn)程運(yùn)行期間互不干擾。
進(jìn)程運(yùn)行具有獨(dú)立性,不會(huì)因?yàn)橐粋€(gè)進(jìn)程掛掉或者異常而導(dǎo)致其它進(jìn)程出現(xiàn)問(wèn)題!
內(nèi)核結(jié)構(gòu) + 代碼和數(shù)據(jù)
? 思考:那么操作系統(tǒng)是如何做到進(jìn)程具有獨(dú)立性的呢?
(我們將在后續(xù)講解進(jìn)程地址空間時(shí)揭曉)
0x01 并行和并發(fā)
并行:多個(gè)進(jìn)程在多個(gè) CPU 下分割,同時(shí)進(jìn)行運(yùn)行,我們稱之為并行。
并發(fā):多個(gè)進(jìn)程在單個(gè) CPU 下采用進(jìn)程切換的方式,在一段時(shí)間內(nèi),讓多個(gè)進(jìn)程都得以推進(jìn),稱之為并發(fā)。
下面我們來(lái)理解一下并行與并發(fā)。
一般服務(wù)器都是雙 CPU 的,所以雙 CPU 的系統(tǒng)是存在的,就會(huì)存在多個(gè)進(jìn)程同時(shí)在跑的情況。
如果存在多個(gè) CPU 的情況,任何一個(gè)時(shí)刻,都有可能有兩個(gè)進(jìn)程在同時(shí)被運(yùn)行 —— 并行?。
但我們大家接觸的、用的筆記本電腦基本都是單核的,單 CPU 的任何時(shí)刻只允許一個(gè)進(jìn)程運(yùn)行。
我的電腦是單 CPU 的,但是我的電腦中有各種進(jìn)程都可以在跑???怎么肥事啊?
它是怎么做到的呢?
不要認(rèn)為進(jìn)程一旦占有 CPU,就會(huì)一直執(zhí)行到結(jié)束,才會(huì)釋放 CPU 資源。
所以一直讓它跑,直到進(jìn)程執(zhí)行完,是不存在的,我們遇到的大部分操作系統(tǒng)都是 分時(shí) 的!
操作系統(tǒng)會(huì)給每一個(gè)進(jìn)程,在一次調(diào)度周期中,賦予一個(gè) 時(shí)間片 的概念。
例:一秒鐘之內(nèi)每一個(gè)進(jìn)程至少要被調(diào)度20次,每一次調(diào)度就是自己代碼得以推進(jìn)的時(shí)候。
在一個(gè)時(shí)間段內(nèi),多個(gè)進(jìn)程都會(huì)通過(guò) "切換交叉" 的方式,當(dāng)多個(gè)進(jìn)程的代碼,在一段時(shí)間內(nèi)都得到推進(jìn) ——??并發(fā)。
0x02 進(jìn)程搶占
? 思考:OS 就是簡(jiǎn)單的根據(jù)隊(duì)列來(lái)進(jìn)行前后調(diào)度的嗎?有沒(méi)有可能突然來(lái)了一個(gè)優(yōu)先級(jí)更高的進(jìn)程?
搶占式內(nèi)核!我們現(xiàn)在的計(jì)算機(jī)基本都是支持 搶占 的。正在運(yùn)行的低優(yōu)先級(jí)進(jìn)程,可能正在享受著它的時(shí)間片、推進(jìn)著代碼,但是如果來(lái)了優(yōu)先級(jí)更高的進(jìn)程,我們的調(diào)度器會(huì)直接把對(duì)應(yīng)的進(jìn)程從 CPU 上剝離,放上優(yōu)先級(jí)更高的進(jìn)程,這個(gè)操作就叫做 進(jìn)程搶占。
了解
a. 不允許不同優(yōu)先級(jí)的進(jìn)程存在的?
b. 相同優(yōu)先級(jí)的進(jìn)程,是可能存在多個(gè)的
task_struct* queue[5];
根據(jù)不同的優(yōu)先級(jí),將特定的進(jìn)程放入不同的隊(duì)列中!這其實(shí)就是一張簡(jiǎn)單的哈希表,后面列入的都是隊(duì)列,其原理是通過(guò)哈希根據(jù)不同的哈希值確定隊(duì)列的優(yōu)先級(jí),每一種優(yōu)先級(jí) Linux 都會(huì)維護(hù)一個(gè)隊(duì)列。
舉個(gè)最簡(jiǎn)單的例子,下面的 z 是如何得到已經(jīng)釋放的臨時(shí)變量 a 的數(shù)據(jù)的?
int func() {
int a = 10 + 20;
return a;
}
int z = func();
寄存器功不可沒(méi),拷貝一份到寄存器里去,然后再??給 z 變量。
CPU 內(nèi)的寄存器是:可以臨時(shí)地存儲(chǔ)數(shù)據(jù)
寄存器分為 可見寄存器 和 不可見寄存器 。
當(dāng)進(jìn)程在被執(zhí)行的過(guò)程中,一定會(huì)存在大量的臨時(shí)數(shù)據(jù),會(huì)暫存在 CPU 內(nèi)的寄存器中。
寄存器上數(shù)據(jù)的重要性:
我們把進(jìn)程在運(yùn)行中產(chǎn)生的各種寄存器數(shù)據(jù),我們叫進(jìn)程的硬件上下文數(shù)據(jù)。
- 當(dāng)進(jìn)程被剝離:需要保存上下文數(shù)據(jù)
- 當(dāng)進(jìn)程恢復(fù)時(shí):需要將曾經(jīng)保存的上下文數(shù)據(jù)恢復(fù)到寄存器中。
上下文在哪里保存?task_struct?!
?? 注意事項(xiàng):要準(zhǔn)確區(qū)分,"寄存器" 和 "寄存器里的數(shù)據(jù)" 的區(qū)別。
- 寄存器只有一套,但是寄存器里的數(shù)據(jù)有多份。
Ⅲ. 環(huán)境變量(Environment Var)
0x00 引入:思考一個(gè)問(wèn)題
? 思考:為什么我們的代碼運(yùn)行要帶路徑,而系統(tǒng)的指令不用帶路徑?
如果我們直接輸入我們的可執(zhí)行程序,會(huì)顯示?bash: process: command not found?
我們說(shuō)過(guò),執(zhí)行系統(tǒng)的指令實(shí)際上也是程序,系統(tǒng)的指令你也是可以帶上路徑的:
其實(shí),我們可以通過(guò)它的報(bào)錯(cuò) "command not found" 發(fā)現(xiàn)些什么!
要執(zhí)行一個(gè)可執(zhí)行程序,前提是要先找到它。
現(xiàn)在我們的問(wèn)題就可以轉(zhuǎn)化成:為什么系統(tǒng)的命令能找到,而我們自己的程序找不到?
?? 真相
系統(tǒng)中是存在相關(guān)的?環(huán)境變量,保存了程序的搜索路徑的!
為什么我們的代碼運(yùn)行要帶路徑,而系統(tǒng)的指令不用帶?其本質(zhì)是由環(huán)境變量 ?引起的!
0x01 環(huán)境變量 PATH?
我們可以通過(guò)?env
指令查看環(huán)境變量:
$ env
這些變量每一個(gè)都有它特殊的用途,系統(tǒng)中搜索可執(zhí)行程序的環(huán)境變量叫做?。
我們可以通過(guò) grep
?去抓一下:
如何查看環(huán)境變量的內(nèi)容?我們可以使用 echo
??去顯示:
$ echo $PATH
?在??前加上 $ 符即可打印出環(huán)境變量:
環(huán)境變量??中會(huì)承載多種路徑,中間用冒號(hào) ( : ) 作為分隔符。
我們?cè)賵?zhí)行某一個(gè)程序時(shí),比如執(zhí)行 ls
?時(shí),我們的系統(tǒng)識(shí)別到?ls
?的輸入時(shí),會(huì)在上面路徑中逐個(gè)搜索,只要在特定的路徑下找到了?ls
,就會(huì)執(zhí)行特定路徑下的?ls
?并停止搜索。
換言之,?就提供了環(huán)境變量,可執(zhí)行程序搜索的路徑。
我們的?ls
?在? usr/bin
? 路徑下,這說(shuō)明當(dāng)前的?ls
?在??中是可以被找到的,
所以執(zhí)行?ls
?的時(shí)侯自然可以不帶路徑,所以我們自己的 ?process?
不帶路徑自然就不能執(zhí)行。
因?yàn)楫?dāng)前的 ?process?
所在的路徑并沒(méi)有這里的環(huán)境變量,程序在搜索的時(shí)侯找了路徑也沒(méi)有找到你這個(gè)可執(zhí)行程序,搜索完找不到,自然就報(bào) "command not found" 了。
0x02 實(shí)踐:讓自己的可執(zhí)行程序不帶路徑也能執(zhí)行
那我現(xiàn)在就想讓我的可執(zhí)行程序 process?
不帶路徑直接執(zhí)行起來(lái),可以嗎?
可以!我們先講述一種簡(jiǎn)單粗暴的方式,直接把我們的可執(zhí)行程序 cp
?拷貝到系統(tǒng)的路徑中:
$ sudo cp process /usr/bin/
既然系統(tǒng)的所有命令都在?usr/bin
路徑下,那我們把我們的?process
拷進(jìn)去就行了。
實(shí)際上,剛才那個(gè)操作我們可以稱之為 "軟件被安裝到系統(tǒng)上",但是我們不建議你去自己安裝。
也更不建議你將你的指令拷貝到 Linux 系統(tǒng)路徑下,因?yàn)檫@會(huì)污染 Linux 下的命令池。
經(jīng)常這么干時(shí)間久了你可能都忘了這個(gè)是干什么的,半年之后:
"誒!我這系統(tǒng)里怎么還有個(gè) process?"
可能就分不清是你寫的還是系統(tǒng)的了,所以我們不建議這么做!
更好的方式是將?process
所處的路徑也添加到環(huán)境變量中。
前置:在 Linux 命令行中,我們也是可以定義變量的,命令行變量分為兩種:
- 普通變量
- 環(huán)境變量(具備全局屬性)
命令行上直接寫,變量名等于值,你所定義的這個(gè)變量?,就是 本地變量。
(我們這里先對(duì)本地變量做一個(gè)小小的理解,稍后我們還會(huì)講解的)
用系統(tǒng)查看環(huán)境變量的命令 env?
去查看一下這個(gè)本地變量,會(huì)發(fā)現(xiàn)根本找不到,
因?yàn)樗灰原h(huán)境變量的形式存在,但是它是存在的!
如果你想讓一個(gè)變量變成環(huán)境變量,你可以通過(guò) export 導(dǎo)出一個(gè)在系統(tǒng)中可以查看的環(huán)境變量:
$ export []=[]
通過(guò) env 并 grep 一下這個(gè)變量,我們就能找到我們導(dǎo)出的環(huán)境變量了:
(至于環(huán)境變量和本地變量之間的差別,我們稍后再講)
現(xiàn)在我們知道該如何導(dǎo)環(huán)境變量了,現(xiàn)在我想執(zhí)行我的程序不想再帶路徑該怎么辦呢?
?? 操作演示:下面我們來(lái)做個(gè)好玩的:
把我們的環(huán)境變量,當(dāng)前路徑導(dǎo)入到??路徑中看看會(huì)發(fā)生什么:
$ export PATH=[路徑]
這么一導(dǎo)之后,我們發(fā)現(xiàn)我們的?process
可以跟系統(tǒng)指令一樣不帶路徑直接執(zhí)行了:
但是好像我們的系統(tǒng)指令全都寄了?。?!
?啊這,怎么會(huì)這樣呢?!
因?yàn)槟惆??里的環(huán)境變量都搞沒(méi)了,只剩你自己的路徑了,所以這些指令自然都找不到了。
出現(xiàn)了你剛才自己可執(zhí)行程序不帶路徑后 Enter 的報(bào)錯(cuò) "command not found" 。
?這……難道環(huán)境污染了(緊張)?我的要服務(wù)器壞掉了(害怕)?
不用擔(dān)心!在命令行上設(shè)置的環(huán)境變量是具有臨時(shí)性的,只在你登陸期間有效。
你剛才的修改只是在內(nèi)存中的修改,不會(huì)修改系統(tǒng)當(dāng)中的相關(guān)配置文件。
所以你只需要關(guān)掉重開就行了,隨便搞,不會(huì)影響。
如果你想讓你的環(huán)境變量設(shè)置永久有效的話,是需要更改配置文件的,該配置文件在系統(tǒng)當(dāng)中,跟云服務(wù)器沒(méi)有關(guān)系。
那我們?cè)撛趺醋瞿???lái),這么做:
$ export PATH=$PATH:[路徑]
0x03 環(huán)境變量的導(dǎo)入和解除
剛才我們通過(guò) export 去導(dǎo)入變量,如果想取消一個(gè)變量,就可以使用 unset 來(lái)取消變量設(shè)置:
此時(shí)我們使用?unset 環(huán)境變量,就可以解除 foo:
" 這些東西實(shí)際上都是 shell 命令,export 是導(dǎo)出,unset 是取消 "
0x04 介紹幾個(gè)常見的環(huán)境變量
剛才我們介紹了環(huán)境變量?,它是用來(lái)指定命令的搜索路徑的。?
下面我們來(lái)詳細(xì)介紹一下常見的環(huán)境變量,剛才我們就是用?env
指令去查看環(huán)境變量的:
我們能看到有很多環(huán)境變量,比如下面這個(gè)??就是表示 "對(duì)應(yīng)這臺(tái)主機(jī)的主機(jī)名" 。
我們同樣也是可以通過(guò)?echo
?指令帶上 $ 去查看環(huán)境變量:
echo $HOSTNAME
再比如?,它可以告訴你你的 shell 在哪里,通常是 /bin/bash?
echo $SHELL
得益于 Linux 存在歷史命令的記錄功能,我們可以在 Xshell 里 ↑ ↓ 顯出歷史命令,就像這樣:?
"總不能一直記吧?肯定是有個(gè)指令記錄的閾值的!"
沒(méi)錯(cuò)!Linux 最多允許你記錄的歷史命令條數(shù)是 3000。
而我們接下來(lái)要介紹的???(History Size),就是定義一共記錄多少歷史指令的環(huán)境變量:
$ echo $HISTSIZE
順便一提,我們可以通過(guò) history
?命令令去查看我們歷史敲過(guò)的所有命令:
?再來(lái)!我們?cè)僬f(shuō)幾個(gè) ~
我們一般是通過(guò)?whoami
指令去查看當(dāng)前是誰(shuí)正在使用系統(tǒng)的,而??就記錄了當(dāng)前誰(shuí)在用。
$ echo $USER
???????
不知道大家有沒(méi)有關(guān)注過(guò),每次登陸服務(wù)器默認(rèn)所處的路徑?就是默認(rèn)所處的工作目錄。
root 用戶的工作目錄和普通用戶的工作目錄不同,那 Linux 是如何知道的呢??
:指定用戶的主工作目錄(即用戶登陸到 Linux 系統(tǒng)中時(shí),默認(rèn)的目錄)
當(dāng)然還有很多,比如??記錄了誰(shuí)登的服務(wù)器、地址、端口號(hào)等。
(環(huán)境變量實(shí)在多,全部講完不太現(xiàn)實(shí),上面我們講的都是一些常用的,歡迎補(bǔ)充)
0x05 尾記
命令行中啟動(dòng)的進(jìn)程,父進(jìn)程全部都是 bash 。
環(huán)境變量具有全局屬性,環(huán)境變量是會(huì)被子進(jìn)程繼承下去的。
所謂的本地變量,本質(zhì)就是在 bash 內(nèi)部定義的變量,不會(huì)被子進(jìn)程繼承下去。
Linux 下大部分命令都是通過(guò)子進(jìn)程的方式執(zhí)行的,但是還有一部分命令不通過(guò)子進(jìn)程的方式執(zhí)行,而是由 bash 自己執(zhí)行(調(diào)用自己的對(duì)應(yīng)的函數(shù)來(lái)完成特定的功能,比如 cd 命令),我們把這種命令叫做 內(nèi)建命令。
?
?? [ 筆者 ]? ?王亦優(yōu)
?? [ 更新 ]? ?2023.2.10
? [ 勘誤 ]?? /* 暫無(wú) */
?? [ 聲明 ]? ?由于作者水平有限,本文有錯(cuò)誤和不準(zhǔn)確之處在所難免,
本人也很想知道這些錯(cuò)誤,懇望讀者批評(píng)指正!
?? 參考資料? C++reference[EB/OL]. []. http://www.cplusplus.com/reference/. Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. . 百度百科[EB/OL]. []. https://baike.baidu.com/.文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-803076.html 比特科技. Linux[EB/OL]. 2021[2021.8.31?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-803076.html |
到了這里,關(guān)于【看表情包學(xué)Linux】進(jìn)程優(yōu)先級(jí) | 查看系統(tǒng)進(jìn)程 | 優(yōu)先級(jí)修改 | 進(jìn)程的切換 | 競(jìng)爭(zhēng)性與獨(dú)立性 | 并行并發(fā)的概念 | 環(huán)境變量的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!