十三:現在到底有誰在干什么?進程

          首先,什么是進程,我們要把它和程序明確區分開來。
          先說一下程序吧,程序是一個靜態概念,它是“實際存在”于操作系統中的一段指令,或者代碼,總之,它是一段可以被成功解釋的腳本,或者被編譯的代碼,在操作系統中我們可以直觀的看到。
          而進程是一個動態概念,它是指程序運行的過程。

          *進程和程序沒有直接的關系,一個程序可以啟動多個進程,一個進程可以被多個程序調用。

          一個常用的查看進程的命令是ps,他能生成一個當前的進程快照
          示例:ps

          直接使用”ps”我們可以看到有兩行數據,一個bash,也就是當前的shell,另一個就是ps本身。我們看到有一列叫PID,它意為進程的ID;TTY,是teletype的縮寫,表示終端的類型。TIME表示占用CPU的時間。
          不過直接使用ps信息量來得太少,而且他只顯示當前終端相關的進程。
          有一組常用的命令組合是aux,這能給我們提供足夠的信息


          aux選項顯示了所有用戶的進程。值得一提的是,ps能夠接受多個不同版本Unix的參數,比如剛才說的aux這組參數,就是BSD的參數,而列表也是BSD風格的。標準一組常用參數是-ef,和aux類似。
          以aux這組參數展示的列表為例,說明一下每一列的含義
          • USER:表示進程的所有者
          • PID:進程ID號
          • %CPU:CPU的使用率
          • %MEM:內存的使用率
          • VSZ:虛擬內存大小
          • RSS:占用的內容的大小
          • START:進程運行的起始時間,超過24個小時則按天顯示
          • TTY:已經提過,是終端的類型,但是圖上我們看到很多終端顯示“?”,這表示他們沒有控制終端
          這其中多說一下STATE列,這一列表示進程的狀態,進程的狀態有很多種
          • R:運行狀態,running
          • S:休眠狀態,sleeping
          • D:不可中斷的休眠狀態
          • T:進程終止
          • Z:zombie!這是一個死進程,或者說僵尸進程
          • <:高優先級別的進程,“不友好的進程”
          • N:低優先級別的進程,“友好的進程”
          上面有幾個名詞需要額外說一下
          *僵尸進程:一個進程可以產生另外一個進程,產生的新進程則為子進程,如果子進程已經終止,并且父進程沒有從進程列表里清空他,那么子進程就變僵尸了…
          *進程優先級別:雖然我們在使用電腦的時候,感覺他同時在做許多事情,但其實他是在飛快的輪換著做很多事,飛快的程度讓我們感覺不出他是在輪換著執行,更像是同時執行,既然是輪換執行,那么就有先后之分,進程優先級別越高,那么該進程就會占用更多的CPU時間,級別低的自然就占用的少了。

          和ps相似的一個命令叫pstree,輸出一個樹型結構的進程列表,會展示進程間父/子關系。

          程序啟動時,調整進程的優先級別:nice
          nice只能在程序啟動時調整他的優先級別
          用法:nice -n 程序,n代表優先級別,取值范圍是-20~19,取值范圍只能在這里,如果你輸入其他的值,比如-30,那么系統會自動調整為-20。
          示例:nice –20 我的程序,修改“我的程序”的優先級別為-20,。注意,參數是“–20”,有兩個橫杠,第二個橫杠代表負,第一個橫杠代表參數。

          修改一個正在運行的程序的優先級別:renice
          修改的程序可以正在運行
          用法:renice -n 程序,-n是一個參數
          示例:renice -5 我的程序,“我的程序”正在運行,修改他的優先級別為-5。這里的-n是一個參數,-5表示負五,并不是五。

          動態的去查看進程:top
          剛才說過,ps命令是生成一個當前進程的快照,意為只是那一個時刻進程的狀態,top命令同樣會產生一組進程列表,但是他會定時刷新這組列表,盡量反映最新的進程狀態,并且會報告一些進程概要。你可以想象一下Windows下的Ctrl+Alt+Delete

          top命令執行后,上方會顯示一個進程的概要

          概要中比較明顯的數值就不一一說明了,但是要看一下那個叫load average的值,他直譯過來可以叫做平均負載,他有三個值,這反映了系統最后60s,最后5分鐘和最后15分鐘內等待運行進程的個數,他可以反映系統忙碌的程度,如果這個值小于1.0,那么說明系統不忙碌。
          CPU相關的百分比,man給出了一個說明,注意其中是否友好的進程,其實是代表了優先級高與低的進程。



          查看被暫停的或者后臺任務的狀態:jobs
          要說明這個命令,我們需要先知道讓一個命令后臺執行的方法。除了系統的進程以服務的形式在運行之外,我們可以使用&符號來指明一個命令后臺運行,通常他可能是一個耗時的操作,比如備份,大范圍搜索等。
          示例:find / -name [a*]>~/res.txt &
          我們把“&”符號連接在一個命令的后面,使得他變為后臺運行,同時,我們使用jobs命令來查看他們,他可能會是這樣

          我們可以使用fg和bg命令來控制進程在前后臺的切換,比如我們將一個搜索放在后臺執行,在他沒有完成之前,通過jobs查看,它會顯示running狀態,此時,我們通過“fg jobs編號”命令可以把后臺正在運行的進程切換到前臺來執行。

          進程的控制:kill
          是的,就是這么直白!干掉他!當然,這也是kill命令最常用的作用,終止一個進程。
          示例:kill 進程id,當我們通過ps或者top發現我們需要操作的進程之后,我們可以使用kill命令來終止相應pid的進程,注意,我這里說的是終止,并不是像命令所說的那樣殺死,因為kill能做的遠不止終止一個進程。我們通過kill -l可以查看我們可以發送哪些信號給當前進程。

          我們看到,這里有很多“信號”,在我們使用“kill PID”的時候,實際上市使用的“kill -15 PID”,-15是kill對一個進程發出的默認信號,它代表終止,但是有時候,這種手段并不管用,那么我們需要使用kill -9來終止一個進程,從圖中我們可以看出,-9代表kill,它意味著真正的殺死一個進程。
          因為進程的不同,從而導致了進程接收到終止信號后產生的行為也不同,有些能夠乖乖的終止,但有些不能。聽話的進程在接收到-15(終止信號)后會做一些善后處理之后終止,而那些不聽好的或許不予理睬,那么此時我們需要-9(殺死信號)來終止進程,但是這個信號發出之后就相當于一棍打死,沒有給進程余地來善后,所以這也是終止進程的殺手锏。

          根據名字終止進程:killall
          和kill類似,都能夠終止進程,但是killall能夠根據進程的名稱來終止一個或者一組進程
          示例:killall httpd,終止所有httpd進程,當然,你需要root權限才能終止其他用戶的進程
          一些其他的操作
          *終止一個正在運行的程序:Ctrl+c,注意,c是cancel,不是copy
          *掛起(暫停)一個正在運行的程序:Ctrl+z

          posted on 2015-07-16 11:54 都較瘦 閱讀(110) 評論(0)  編輯  收藏 所屬分類: Linux

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          公告

          博客定位:囿于目前的水平,博客定位在記錄自己的學習心得和隨手的練習

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 高陵县| 金坛市| 霍州市| 怀仁县| 山阴县| 株洲市| 浮梁县| 榆林市| 荣昌县| 黑山县| 德阳市| 临泽县| 承德县| 铜陵市| 自治县| 泾阳县| 左贡县| 那曲县| 丹寨县| 晋宁县| 康定县| 遂平县| 寻乌县| 清远市| 望城县| 鸡东县| 读书| 佛坪县| 海宁市| 新闻| 陆丰市| 龙江县| 林周县| 三河市| 湛江市| 出国| 宿松县| 衡阳市| 黎平县| 玛曲县| 怀来县|