Linux 之 進程管理 -- 進程的定義和linux多人多任務環境

~~~~~~貓毛要開啟瘋狂寫文章模式~~~~~~
前段時間簡書不能發表文章可是把毛給憋壞了,希望同伴們多多留言點贊,這樣貓毛才會更加有動力!!!

1 理解“什么是進程”(process)

當一個程序被加載到內存當中運作,那么在內存內的那個數據就被稱為進程(process)。進程是操作系統上面非常重要的概念,所有系統上面跑的數據都會以進程的型態存在。

1.1 理解PID的定義

觸發任何一個事件時,系統都會將他定義成為一個進程,并且給予這個進程一個ID,稱為PID,同時依據啟發這個進程的用戶與相關屬性關系,給予這個PID一組有效的權限設定。從此以后,這個PID能夠在系統上面進行的動作,就與這個PID的權限有關了!


程序被加載成為進程以及相關數據的示意圖

如圖所示例,程序一般是放置在實體磁盤中(用windows的話來說就是D盤、E盤...),然后透過用戶的執行來觸發。觸發后會加載到內存中成為一個個體,那就是進程。為了操作系統可管理這個進程,因此進程有給予執行者的權限/屬性等參數,并包括程序所需要的腳本與數據或文件數據等,最后再給予一個PID。系統就是通過這個PID來判斷該process是否具有權限進行工作的。

小總結:進程其實就是在計算機內存中運作的程序。

不過,linux是怎么為每一個bash設置不同權限的?如果人來做豈不是太燒腦了???

當我們登入并執行bash時,系統已經給我們一個PID了,這個PID就是依據登陸者的UID/GID(/etc/passward)來的。我們知道/bin/bash是一個程序,當dmtsai登入后,他取得一個PID號碼為2234的進程,這個進程的User/Group都是dmtsai,而當這個程序進行其他作業時,例如執行touch命令時,那么由這個進程衍生出來的其他進程在一般狀態下,也會沿用這個進程的相關權限的。

程序與進程之間的差

這里將程序與進程做個總結:
程序(program):通常為binary program,放置在儲存媒體中(如硬盤,光盤),為實體文件的型態存在
進程(process):程序被觸發后,執行者的權限與屬性、程序的代碼與所需數據等都會被加載內存中,操作系統并給予這個內存內的單元一個標識符(PID),可以說,進程就是一個正在運作中的程序。

1.2 子進程與父進程

當我們登入系統后,會取得一個bash的shell,然后,我們用這個bash提供的接口去執行另一個指令,例如/user/bin/passwd或者是touch等等,那些另外執行的指令也會被觸發成為PID。那個后來執行指令才產生的PID就是子進程,而在我們原本的bash環境下,就稱為父進程

進程相關系之示意圖

因為每個進程都有一個PID,那某個進程的父進程是怎么判斷的?實際上,通過Parent PID(PPID)就可以判斷。我們在之前環境變量部分提到過環境變量的繼承問題,子進程可以取得父進程的環境變量。
例如,在你的命令行中輸入 ps -l查詢你當前的進程信息,這里用鳥哥的例子
ps -l 輸出的進程相關信息

在圖中我們可以看到第一個bash的PID與第二個bash的PPID都是13928,因此就可以判斷第一個bash是第二個的父程序。

有朋友會常常發現,明明將有問題的進程關閉了,怎么過一陣子又自動產生?而且新產生的那個進程的PID和原先的還不一樣。這是怎么回事?不要懷疑,如果不是crontab工作排程的影響,肯定有一支父進程存在,所以你殺掉子進程后,父進程就會主動再生一支,因此要找出父進程,然后將它刪除掉。

1.3 fork and exec 進程呼叫的流程

其實,子進程與父進程之間的關系還挺復雜的,最大的復雜點在于進程互相之間的呼叫。在Linux的進程呼叫通常稱為 fork-and-exec的流程!
進程都會藉由父進程以復制(fork)的方式產生一個一模一樣的子進程,然后被復制出來的子進程再以exec的方式來執行實際要進行的程序,最終就成為一個子進程的存在。


進程使用fork and exec 呼叫的情況示意圖

1.4 了解常駐在內存的進程(daemon)

我們之前學的一些指令例如:ls/mv/cp等等都是執行完就結束了,也就是說,該項指令被觸發后所產生的PID很快就會終止。那有沒有一直在執行的進程呢?
我們知道系統每分鐘都會去掃描/etc/crontab以及相關的配置文件,來進行工作排程。而這個工作排程就是crond這個程序所管理的,我們將他啟動在背景當中一直持續不斷的運作,也就是說“常駐在內存中的進程”。
常駐在內存中的進程通常都是負責一些系統所提供的功能以服務用戶各項任務,因此這些常駐程序就會被我們稱為服務(daemon)。系統的服務非常多,不過主要大致分成系統本身所需要的服務,例如剛提到的crond及atd,還有rsyslogd等等的。還有一些則是負責網絡聯機的服務,例如Apache,named,postfix,vsftpd...等等的。這些網絡服務比較有趣的地方,在于這些程序被執行后,他會啟動一個可以負責網絡監聽的端口(prot),以提供外部客戶端(client)的聯機要求。

以crontab來說,他的主要執行程序名稱應該是cron或at才對,為什么要在最后加d?是因為Linux希望我們可以簡單的判斷該程序是否為daemon,所以,一般daemon類型的程序都會加上d在文件名后頭,包括服務器篇我們會看到的httpd,vsftpd等等都是。

2. Linux 的多人多任務環境

通過前面的學習,我們現在知道了,其實在Linux系統底下執行一個指令時,系統會將相關的權限、屬性、程序代碼與數據等均加載內存,并給予這個單元一個進程標識符(PID),最終該指令可以進行的任務則與這個PID的權限有關。這也就是為什么Linux這么多用戶,但是卻每個人都可以擁有自己的環境。

  • 多人環境:除了root之外,其他人都必須要受一些限制,而每個人進入Linux的環境設定都可以隨著每個人的喜好設定(~/.bashrc)
  • 多任務行為:
    目前的CPU速度可高達幾個GHz,這代表CPU每秒鐘可以運作10的9次方這么多次指令。我們的Linux可以讓CPU在各個工作間進行切換,其實每個工作都僅占去CPU的幾個指令次數,所以CPU每秒就能夠在各個進程之間進行切換啦。

CPU切換進程的工作,與這些工作進入到CPU運作的排程(CPU排程,非rontab排程)會影響到系統的整體效能!目前Linux使用的多任務切換行為是一個非常棒的機制,幾乎可以將PC的性能整個壓榨出來。由于效能非常好,因此當多人同時登入系統時,其實會感受到整部主機好像就是為了你存在一般。這就是多人多任務的環境。

2.1 多重登入環境的七個基本終端窗口

在Linux當中,默認提供了六個文字界面登入窗口以及一個圖形界面,你可以使用[Alt]+[F1].....[F7]來切換不同的終端機界面,而且每個終端機界面的登陸者還可以不同人。其實,這也是多任務環境下所產生的一個情況,我們的Linux默認會啟動六個終端機登入環境的程序,所以我們就會有六個終端機接口。

舉例:六個終端機接口的好處
進行特殊的進程管理
Linux幾乎可以說絕對不會當機的。因為他可以在任何時候,將某個被困住的進程殺掉,然后再重新執行進程而不用重新啟動。如果我在Linux以下文字界面登入,在屏幕當中顯示錯誤訊息后就掛了:動都不能動,如何是好?這個時候默認的七個窗口就榜上忙了,可以隨意切換到其他的終端機界面,然后以ps-aux找出剛剛的錯誤進程,然后給他kill一下,回到剛剛的終端機界面,又恢復正常了。

2.2 單一bash接口下進行多個工作 &

其實,我們登入bash之后,就是取得一個名為bash的PID了,而在這個環境底下所執行的其他命令,就幾乎都是所謂的子進程了。那么,在這個單一的bash接口下,我可不可以進行多個工作?當然可以,(使用&)
eg: cp file1 file2 &在這串指令中,重點放在&的功能,他表示將file1這個文件復制為file2,且放置于背景中執行,也就是說執行這個命令之后,在這個終端接口仍然可以做其他工作。而當cp file1 file2指令執行完畢之后,系統會在你的終端接口顯示完成的消息。

多人多任務的系統資源分配問題考慮
多人多任務確實又很多的好處,但其實也有管理上的困擾,因為使用者越來越多,將導致管理的困擾。另外,由于使用者日盛,CPU的運算與RAM的大小可能就會不敷使用。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,119評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,382評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,038評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,853評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,616評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,112評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,192評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,355評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,869評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,727評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,928評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,467評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,165評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,570評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,813評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,585評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,892評論 2 372

推薦閱讀更多精彩內容

  • 文/tangsl(簡書作者) 原文鏈接:http://www.lxweimin.com/p/2b993a4b913e...
    西葫蘆炒胖子閱讀 3,794評論 0 5
  • 又來到了一個老生常談的問題,應用層軟件開發的程序員要不要了解和深入學習操作系統呢? 今天就這個問題開始,來談談操...
    tangsl閱讀 4,143評論 0 23
  • 技術交流QQ群:1027579432,歡迎你的加入! 一、概念的理解 首先程序與進程是什么?程序與進程又有什么區別...
    CurryCoder閱讀 2,030評論 0 5
  • 這本書主要寫的是自律和愛。 一自律:不自律的表現 1:拖延時間,希望問題自動消失。 2:對問題視而不見,假裝 ...
    杜書曉閱讀 157評論 0 0
  • 語言很暴力 語言很無力 語言很難懂 語言很平淡 語言太麻煩 不如畫畫 不如唱歌 不如寫詩
    天野丟閱讀 148評論 0 0