Linux 進程及作業管理

一 進程、線程、程序概念

1、進程(Process)

什么是進程,簡單的說,進程是程序的執行實例,即運行中的程序,同時也是程序的一個副本;程序是放置于磁盤的,而運行中的程序是位于內存中的。

2、線程(Thread)

一個進程至少包括一個線程,通常將該線程稱為主線程,所以線程是比進程更小的單位,是系統分配處理器時間資源的基本單元。一個進程要想同時在多顆CPU上運行,必須得分成互不影響的多個執行流,而后每組單獨在各自所分配的CPU上運行,這種分化后的執行流且有著比進程更小資源分配單位稱之為線程。線程之間可以共享內存空間,當一個文件需要被打開多次時,線程模型可以節省很大的內存空間,但是得避免因資源征用造成死鎖問題。并且線程在運行過程當中,如果某一個線程崩潰或是出現意外情況,會影響同個進程內其它線程,比單進程模型穩定性差。

3、程序(Program)

程序由指令和數據組成。

程序是為了達到特定的目的,可以被計算機運行并且由命令代碼組成的語句序列。

程序只是一個普通文件,是一個機器代碼指令和數據的集合,這些指令和數據存儲在磁盤上的一個可執行映象(Executable Image)中,所以,程序是一個靜態的實體。

二 進程相關知識

1.虛擬地址空間

在內存中,每個程序的運行都是孤立的,每個程序只知道當前內存空間只運行了自己和內核,而看不到其它的進程。

2.內核模式與用戶模式

以32bit系統為例,Linux的虛擬地址空間為0~4G。Linux內核將這4G字節的空間分為兩部分。將最高的1G字節(從虛擬地址0xC0000000到0xFFFFFFFF),供內核使用,稱為“內核空間”。而將較低的3G字節(從虛擬地址0x00000000到0xBFFFFFFF),供各個進程使用,稱為“用戶空間)。Linux使用兩級保護機制:0級供內核使用,3級供用戶程序使用。

3.進程的狀態:

        運行態:runnnig

        睡眠態:sleeping

        可中斷睡眠:interruptable,隨時來請求,隨時能喚醒,比如處理完當前請求后暫時還沒有更多請求下,這種sleep就是可                                    中斷 

        不可中斷睡眠:uninterruptable,等待外部條件滿足之前無法繼續運行。       

        停止態:stopped,不會再被內核調度并運行。

        僵死態:zombie,父進程先于子進程結束了,子進程再也不能被停掉的進程。

4.進程的優先級

        CPU挑選進程是根據進程的優先級進行的,進程優先級的取值范圍為0-139。

        實時優先級:0-99,數字越大,優先級越高;(內核控制)

        靜態優先級:100-139,數字越小,優先級越高。(用戶可控制的優先級)

        用戶可以通過調整nice值來改變進程的優先級。

        nice值:-20-19 調整靜態優先級

        進程啟動時,默認nice值為0,優先級對應為120。

        動態優先級:由內核維護,動態調整。

        Linux使用搶占式多任務:當時鐘信號到達時,高優先級進程可以搶占CPU。

5.進程間通信方式(IPC: Inter Process Communication)

同一主機:

            singnal:信號。

            shm:共享內存。

            semerphor:旗語。

不同主機:

            rpc:remote procedure calling,遠程過程調用。

            socket:IP:port,套接字。

6.進程的分類:

       CPU-Bound(CPU密集型):對于CPU占用率高的進程。

       I/O-Bound(I/O密集型):等待I/O時間長的進程

7.子進程

        進程運行是單線運行的,進程中的指令必須順序執行。             

        子進程:父進程有無法完成的任務時,啟用子進程來執行,此時父進程進入睡眠,子進程執行完成后,返回父進程繼續執行。

        進程創建機制:每一個進程都是由其父進程fork()自身而來。

8.線程

        線程是比進程更小的可以被單獨調度的單位。

        線程將進程的任務指令拆分,分配到不同的CPU上同時運行。

        不過Linux中的進程都是輕量級進程,已經相當于線程的級別了。

三 進程管理相關命令

1.pstree    # 顯示進程樹

  pstree -p

blob.png

2.ps:process state,查看當前進程狀態

  備注:實際上是查看/proc/ *目錄下內核中的狀態信息

    SYNOPSIS

           ps [options]

            

        a:顯示所有與終端有關的進程

        x:顯示所有與終端無關的進程

        u:顯示運行進程的用戶

        -e:顯示所有進程

        -f:顯示完整格式的進程信息

        o  field1, field2,…:自定義要顯示的字段列表,以逗號分隔

常用組合:aux、ef、axo

 ps -aux

blob.png

   USER:運行該進程的用戶

   PID:進程的ID號碼

   %CPU:CPU的占用百分比

   %MEM:內存空間占用比率,占用整個內存空間的比例

   VSZ:虛擬內存集;占用的虛擬內存大小,真正用來占用的內存

        每個內存占用的內存有兩種:線性內存空間、物理內存空間

        線性內存:會映射到物理內存,在線性內存空間角度看是連續的內存占用

        物理內存:實際上是以內存頁框保存,可能一個進程占用的不連續的頁框

   RSS:ResidentSize,常駐內存集,當前進程常駐內存的大小,即不能被交換出去的空間大小

   TTY:運行終端

   STAT:當前進程的運行狀態,BSD樣式

    R:running,運行態

    S:interruptable sleeping,可中斷睡眠

    D:uninterruptable sleeping,不可中斷睡眠

    T:Stopped,停止狀態

    Z:zombie,僵死狀態,進程結束后,在被回收之前狀態

    +:表示一個前臺進程,占據命令提示符

    l:多線程進程

    N:低優先級進程

    <:高優先級進程

    s:session leader ,回話主導進程,如shell,其主導其下的進程

   START:進程開始時間

   TIME:累計運行CPU時間

   COMMAND:使用進程、線程

ps -ef

blob.png

   UID:啟動進程用戶

   PID:運行進程號

   PPID:父進程的進程號,0在內核啟動init之前存在,init啟動后終止,存在過渡,一般為swap的進程

   C:cpu utilization,CPU的占用百分比

   STIME:啟動時間

   TTY:與其終端相關

   TIME:累計運行CPU時間

   CMD:啟動此進程的命令

ps axo  顯示自定義字段列表

 o field1, field2,…:自定義要顯示的字段列表,以逗號分隔,o要寫在后面,因為要帶參數

    常用的field:pid,ni, pri, psr, pcpu, stat, comm, tty, ppid, rtprio

    ni:nice值;

    priority:priority,優先級;

    rtprio:realtime priority,實時優先級;

3.pgrep,pkill:基于進程名字或者其他屬性對相關進程發起查詢、發送信號

  SYNOPSIS

         pgrep [options]  [pattern]

        

        -o:僅顯示找到的最?。ㄆ鹗迹┻M程號

        -n:僅顯示找到的最大(結束)進程號

        -l:顯示進程名稱

        -P:指定父進程號

        -g:指定進程組

        -t:指定開啟進程的終端

        -u:指定進程的有效用戶ID

   blob.png

4.pidof:根據進程名獲取取其pid;

    SYNOPSIS

           pidof [-s] [-c] [-x] [-o omitpid] [-o omitpid..]  program [program..]

            

        -s:僅顯示一個

blob.png

5.top:- display Linuxprocesses,動態顯示進程信息

   SYNOPSIS

        top  [OPTION]

   (1)選項:

       -d #:指定刷新時間間隔,默認為3秒;

         -b:以批次方式顯示;

       -n #:顯示多少批次;

   (2)在top顯示過程中通過交互式命令指定排序(默認CPU):

           P:以占據CPU百分比排序;

           M:以占據內存百分比排序;

           T:累積占用CPU時間排序;

   (3)首部信息關閉

          uptime信息:l命令

          tasks及cpu信息:t命令

          內存信息:m命令

   (4)退出命令:q

   (5)修改刷新時間間隔:s

   (6)終止指定的進程:k

 top

blob.png

blob.png

  這一行的內容表示:

                23:11:04:當前系統時間;

                up  1:00:服務器連續運行的時長為1小時;

                2 users:當前登錄系統的用戶數;

                load average:過去1分鐘、5分鐘、15分鐘的平均負載

1:數字,分別顯示各CPU的相關信息;

blob.png

使用數字1可以查看不同的CPU的信息,下面說明各字段具體的含義:                     

                us:user space,用戶運行程序時間百分比;

                sy:system,用于運行內核所占用CPU的百分比;

                ni:nice,用戶進程空間內改變過優先級的進程占用CPU百分比;

                id:idle,空閑CPU百分比;

                wa:wait io,等待IO花費的時間;

                hi:hardware interrupt,硬中斷占用CPU的百分比;

                si:software interrupt,軟中斷占用CPU的百分比;

                st:stolen,偷走的時間百分比。

blob.png

各字段含義如下:

                Mem:物理內存;

                Swap:交換分區; 

                buffers:緩沖區,用于減少進程之間的等待時間;

                cache:CPU與內存之間的高速緩存,用于減少CPU的等時間。 

 top -p 1727

blob.png

6.uptime命令:顯示系統時間、運行時長及平均負載  

去1分鐘、5分鐘和15分鐘的平均負載;等待運行的進程隊列的長度;

blob.png

7.htop命令

這個工具默認沒有安裝 需要第三方源才可以安裝

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

yum install htop

(1)選項:

    -d#:指定延遲時間間隔;

    -uUserName:僅顯示指定用戶的進程;

    -sCOLUME:以指定字段進行排序;

(2)子命令:

    l:顯示選定的進程打開的文件列表;

    s:跟蹤選定的進程的系統調用;

    t:以層級關系顯示各進程狀態;

    a:將選定的進程綁定至某指定的CPU核心;

(3) 顯示敘述

blob.png

左上方數據:表示每顆CPU、內存、交換內存的使用率

右上方數據:

    Tasks當前的任務數量,用戶空間進程

    thr:線程數量

    running:運行的數量

    Load average :過去一分鐘、五分鐘、十五分鐘的平均負載

8.vmstat命令    # 顯示虛擬內存統計信息

 vmstat

blob.png

procs:

    r:等待運行的進程的個數;CPU上等待運行的任務的隊列長度;

    b:處于不可中斷睡眠態的進程個數;被阻塞的任務隊列的長度;

memory:

    swpd:交換內存使用總量;

    free:空閑的物理內存總量;

    buffer:緩沖,與寫相關,加速寫操作;

    cache:緩存,與讀相關,加速讀操作。

swap

    si:數據進入swap中的數據速率(kb/s)

    so:數據離開swap的速率(kb/s)

io

    bi:從塊設備讀入數據到系統的速度(kb/s)

    bo:保存數據至塊設備的速率(kb/s)

system

    in:interrupts,中斷速率;

    cs:contextswitch, 上下文 切換的速率;

cpu

    us:user space

    sy:system

    id:idle

    wa:wait

    st:stolen

9.dstat命令    #系統資源統計工具

    SYNOPSIS

        dstat [-afv][options..] [delay [count]]

 常用選項:

        -c,–cpu:顯示cpu相關信息;

        -C #,#,…,total  顯示第幾顆CPU,total總共的

        -d,–disk:顯示磁盤的相關信息

        -D sda,sdb,…,tobal  指明具體的磁盤信息

        -g:顯示page相關的速率數據;

        -m:Memory的相關統計數據

        -n:Interface的相關統計數據;

        -p:顯示process的相關統計數據;

        -r:顯示io請求的相關的統計數據;

        -s:顯示swapped的相關統計數據;

        –tcp、–udp、–raw 、–socket 網絡連接相關

        –ipc 進程相關

        –top-cpu:顯示最占用CPU的進程;

        –top-io:最占用io的進程;

        –top-mem:最占用內存的進程;

        –top-lantency:延遲最大的進程;

 dstat

blob.png

10.kill命令:      

kill  [-s signal|-SIGNAL]  pid…     向進程發信號

kill -l [signal]:顯示當前系統可用信號:

 blob.png    

常用信號:

1) SIGHUP: 無須關閉進程而讓其重讀配置文件;

2) SIGINT: 中止正在運行的進程;相當于Ctrl+c;

9) SIGKILL: 殺死正在運行的進程;

15) SIGTERM:終止正在運行的進程;

18) SIGCONT:繼續

19) SIGSTOP:停止,將進程送后臺,停止狀態

指定信號的方法:

(1) 信號的數字標識;1, 2, 9

(2) 信號完整名稱;SIGHUP

(3) 信號的簡寫名稱;HUP

11.killall

 killall [-SIGNAL]  program  對所有與program相關的進程發信號

四 系統作業控制命令

1.系統作業job

      (1)job種類:

                前臺作業(foregroud):通過終端啟動,且啟動后會一直占據終端;

                后臺作業(backgroud):可以通過終端啟動,但啟動后即轉入后臺運行(釋放終端);

      (2)讓作業運行于后臺

                1) 運行中的作業:Ctrl+z

                   送往后臺后,作業會轉為停止態;相當于發送kill -19 信號

                2) 尚未啟動的作業:  # COMMAND &

                   此類作業雖然被送往后臺,但其依然與終端相關;如果希望把送往后臺的作業剝離與終端的關系:

                   # nohup COMMAND &

      (3)查看所有的作業:#jobs命令

         +/- 表示優先級;當調用時不加作業號會默認調用+的命令

       (4)可實現作業控制的常用命令:

          #fg  [[%]JOB_NUM]:把指定的作業調回前臺;

          #bg  [[%]JOB_NUM]:讓送往后臺的作業在后臺繼續運行;

          #kill  %JOB_NUM:終止指定的作業;

blob.png

2.調整進程優先級: 

可通過nice值調整的優先級范圍:100-139;分別對應于:-20, 19。進程啟動時,其nice值默認為0,其優先級是120;

    注意:僅管理員可調低nice值;

(1)nice命令:

    以指定的nice值啟動并運行命令:# nice  [OPTION] [COMMAND [ARGU]…]

     選項:-nNICE

            nice -n -5 echo "hello world"

(2)renice命令:

    #renice  [-n]  NICE PID…

    renice -10 1589

(3)查看Nice值和優先級:ps  axo pid, ni, priority, comm 

    ps axo pid,ni,command | grep "bash"

原創文章,作者:liangkai,如若轉載,請注明出處:http://www.www58058.com/11493

(0)
liangkailiangkai
上一篇 2016-03-14
下一篇 2016-03-18

相關推薦

  • N26-第六周博客

    vim編輯器及簡單shell腳本示例 請詳細總結vim編輯器的使用并完成以下練習題 1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; [root@localhost tmp]# vim rc.sysinit:%s@^[[:space:]]\+[^[:s…

    系統運維 2017-02-16
  • 馬哥教育網絡19期+第五周練習博客

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;   grep "^[[:space:]]\+.*" /boot/grub/grub.conf 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行; &n…

    Linux干貨 2016-06-19
  • 常用大數據詞匯中英文對照表

    A 聚合(Aggregation) – 搜索、合并、顯示數據的過程 算法(Algorithms) – 可以完成某種數據分析的數學公式 分析法(Analytics) – 用于發現數據的內在涵義 異 常檢測(Anomaly detection) – 在數據集中搜索與預期模式或行為不匹配的數據項。除了“Anomalies”,用來表示異常的詞有以下幾種:outlie…

    Linux干貨 2015-03-10
  • lvs

    Lvs 一、lvs集群的類型:4類工作模式 1.1、lvs-nat 特點:通過將請求報文中的目標地址和目標端口修改為挑選出的某RS的RIP和PORT實現轉發。 客戶端訪問lvs集群服務,此時報文的源地址為cip,目標地址為vip,通過lvs進行dnat轉發后端服務器主機,此時,報文的源地址為cip,目標地址為rip;后端主機響應時,報文源地址為rip,目標地…

    Linux干貨 2016-10-30
  • Linux小工具之cheat

    隨著linux學習的深入,接觸到的命令越來越多,此時,考驗腦力的時候就到了,除非你是”腦王”,否則面對多如牛毛的linux命令,真的會崩潰!linux前輩們貌似也被同樣的問題所困擾,所以,他們發明了cheat。cheat是在GNU通用公共許可證下,為Linux命令行用戶發行的交互式備忘單應用程序。它提供顯示Linux命令使用案例,包括該命令所有的選項和簡短但…

    2017-08-10
  • 包管理及源碼安裝Apache

    一,概述 yum 倉庫的安裝 在/etc/yum.repos.d/目錄下創建后綴名為repo的配置文件 [CentOS7] name= baseurl= gpgcheck= enabled= 配置文件基本包含的四個要求 安裝及升級本地程序包: * localinstall rpmfile1 [rpmfile2] […] (用install替代) …

    Linux干貨 2016-09-01
欧美性久久久久