Linux進程相關的內容及命令小結(一)


概念:進程,一個活動的程序實體的副本,擁有生命週期,一個進程可能包含一個或多個執行流;
 
進程的創建進程:
  每個進程的組織結構是一致的;
  內核在正常啓動並且全面接管硬件資源之後,會創建一個Init的進程;而這個名叫init的進程負責用戶空間的進程管理;
  CentOS5及以前:SysV Init,Classic Init
  在啓動系統時,Init通過寫腳本的方式來創建各個子進程;利用shell來實現,因此其執行速度非常慢;導致系統的啓動速度和進程的創建速度都非常慢;
  CentOS6:upstart,有Ubuntu研發的新型的Init進程;可以並行的啓動某些有關聯的服務進程,在創建進程的時候,可以多線創建進程;如果有多個CPU或這有多顆CPU核心的話,其進程的創建速度會有比較明顯的變化;第一個進程名稱仍然是init;
  CentOS7:Systemd,參考了MAC OS的啓動邏輯開發一款新版的init程序;其可以以其自身獨立完成整個操作系統的啓動工作;也就是說,在開機並加載內核之後,只需要啓動一個systemd進程就可以將其他各服務進程啓動起來,從而引導整個系統啓動;

  除了init進程之外,其他的各個進程都是由其父進程創建的;由fork()系統調用來實現的;
 每個父進程通過fork()系統調用,複製自身的數據給子進程使用;這種複製方式不是立即複製,而是寫時複製(CoW);
 終止進程:
  當計算機開機的時候,內核(kernel)只建立了一個init進程。Linux內核並不提供直接建立新進程的系統調用。剩下的所有進程都是init進程通過fork機制建立的。新的進程要通過老的進程複製自身得到,這就是fork。fork是一個系統調用。進程存活於內存中。每個進程都在內存中分配有屬於自己的一片空間,當進程fork的時候,Linux在內存中開闢出一片新的內存空間給新的進程,並將老的進程空間中的內容複製到新的空間中,此後兩個進程同時運行。


--------------------------------------------------------------------------------------------------------

 進程優先級:
  0-139
  1-99:實時優先級,數字越大優先級越高;在系統啓動時啓動的進程;
  100-139:靜態優先級,數字越小優先級越高;在用戶執行某些應用程序的時候啓動的進程;
  nice值:
   -20~19:默認的nice值0;
   只有管理員才能使用負整數的nice值,以提升進程的優先級;
   而普通用戶只能使用正整數的nice值,以降低進程的優先級;
  劃分了140個進程隊列;
  Big O標準:
   O(1),O(logN),O(N),O(N^2),O(2^N)


 進程的類型:
  按照進程的啓動方式:
   守護進程:
    Daemon,通常是在系統引導的過程被啓動的,與任何的終端無關;也可以通過終端啓動;
   用戶進程:
    用戶登錄到系統之後,通過終端啓動的進程;
  按照進程的運行位置:
   前臺進程:
    在進程啓動之後,進程一直佔用標準輸出或者標準輸入或者同時佔用標準輸出和標準輸入;
   後臺進程:
    在進程啓動之後,進程不佔用標準輸出和標準輸入;
  按照進程對於資源消耗:
   CPU-Bond:非交互式的進程;
   IO-Bond:編輯器等各種交互式進程;


--------------------------------------------------------------------------------------------------------


Linux系統上與進程有關的命令(查看命令和管理類命令):

pstree:
      pstree - display a tree of processes
      ps:
      ps - report a snapshot of the current processes.
       ps [options]
  1   UNIX options, which may be grouped and must be preceded by a dash.
  2   BSD options, which may be grouped and must not be used with a dash.
  3   GNU long options, which are preceded by two dashes.


 常用選項:


  BSD風格的選項:
    a:顯示所有與終端相關的進程;
    x;顯示所有與終端無關的進程;
    u:顯示發起進程的用戶的賬戶名稱;
  常用的選項組合之一:aux


 ps aux命令顯示的結果中各字段的含義:
  USER:進程的所有者
  PID:進程標識符
  %CPU:進程佔用的CPU處理時間的百分比;
  %MEM:進程佔用的物理內存的百分比;
  VSZ:虛擬內存集(可交換內存集)
  RSS:常駐內存集
  TTY:進程與哪個終端相關;?表示與終端無關;
  STAT:
   R:running,正在運行的進程;
   S:interuptible sleeping,可中斷的睡眠狀態;
   D:uninteruptible sleeping,不可中斷的睡眠狀態;Disk Block;
   T:Trace/STOPPED,被跟蹤/已停止;
   Z:Zombie,僵死態;
   +:前臺進程
   l:包含多線程的進程
   <:高優先級進程
   N:低優先級進程
   s:session leader,有子進程的父進程;
   START:進程開始執行的時候時間戳
   TIME:進程累計的CPU佔用時間;
   COMMAND:啓動進程的命令行參數;


 UNIX風格的選項:
      -e:顯示所有進程
      -f:顯示完整格式的進程信息
      -F:顯示完整格式的進程信息,與-f幾乎相同;


  常用的選項組合之二:-ef
     PPID:父進程PID
     C:表示進程佔用的CPU時間的百分比


  常用的選項組合之三:-eF
     SZ:虛擬內存集
     RSS:常駐內存集
     PSR:表示此進程在哪個CPU核心上運行;
     -H:以層級機構顯示進程的父子關係;


  常用的選項組合之四:-eFH
     o|-o field1,field2,...:以自定義字段的方式顯示進程相關信息;
     field:pid, ppid, ni, rtprio, psr, pcpu, stat, comm, user, tty, vsz, rss,...
  常用的選項組合之五:-eo | axo field1,field2,...


 

... ...




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章