Linux下進程概念,進程管理和日志系統


程序(procedure):不太精確地說,程序就是執行一系列有邏輯、有順序結構的指令,幫我們達成某個結果。就如我們去餐館,給服務員說我要牛肉蓋澆飯,

她執行了做牛肉蓋澆飯這么一個程序,最后我們得到了這么一盤牛肉蓋澆飯。它需要去執行,不然它就像一本武功秘籍,放在那里等人翻看。

 

進程(process):進程是程序在一個數據集合上的一次執行過程,在早期的UNIX、Linux 2.4及更早的版本中,它是系統進行資源分配和調度的獨立基本單位。

同上一個例子,就如我們去了餐館,給服務員說我要牛肉蓋澆飯,她執行了做牛肉蓋澆飯這么一個程序,而里面做飯的是一個進程,做牛肉湯汁的是一個進程,

把牛肉湯汁與飯混合在一起的是一個進程,把飯端上桌的是一個進程。它就像是我們在看武功秘籍這么一個過程,然后一個篇章一個篇章地去練。

 

簡單來說,程序是為了完成某種任務而設計的軟件,比如 vim 是程序。什么是進程呢?進程就是運行中的程序。

程序只是一些列指令的集合,是一個靜止的實體,而進程不同,進程有以下的特性:

  • 動態性:進程的實質是一次程序執行的過程,有創建、撤銷等狀態的變化。而程序是一個靜態的實體。
  • 並發性:進程可以做到在一個時間段內,有多個程序在運行中。程序只是靜態的實體,所以不存在並發性。
  • 獨立性:進程可以獨立分配資源,獨立接受調度,獨立地運行。
  • 異步性:進程以不可預知的速度向前推進。
  • 結構性:進程擁有代碼段、數據段、PCB(進程控制塊,進程存在的唯一標志)。也正是因為有結構性,進程才可以做到獨立地運行

並發:在一個時間段內,宏觀來看有多個程序都在活動,有條不紊的執行(每一瞬間只有一個在執行,只是在一段時間有多個程序都執行過)

並行:在每一個瞬間,都有多個程序都在同時執行,這個必須有多個 CPU 才行

 

線程(thread)是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以並發多個線程,

每條線程並行執行不同的任務。因為線程中幾乎不包含系統資源,所以執行更快、更有效率。

簡而言之,一個程序至少有一個進程,一個進程至少有一個線程。線程的划分尺度小於進程,使得多線程程序的並發性高。另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。就如下圖所示:

 

 

 

 

進程管理

top 工具是我們常用的一個查看工具,能實時的查看我們系統的一些關鍵信息的變化,top 是一個在前台執行的程序,所以執行后便進入到這樣的一個交互界面,

正是因為交互界面我們才可以實時的獲取到系統與進程的信息。在交互界面中我們可以通過一些指令來操作和篩選。

 

ps 也是我們最常用的查看進程的工具之一,我們通過這樣的一個命令來了解一下,他能給我帶來哪些信息

內容 解釋
F 進程的標志(process flags),當 flags 值為 1 則表示此子程序只是 fork 但沒有執行 exec,為 4 表示此程序使用超級管理員 root 權限
USER 進程的擁有用戶
PID 進程的 ID
PPID 其父進程的 PID
SID session 的 ID
TPGID 前台進程組的 ID
%CPU 進程占用的 CPU 百分比
%MEM 占用內存的百分比
NI 進程的 NICE 值
VSZ 進程使用虛擬內存大小
RSS 駐留內存中頁的大小
TTY 終端 ID
S or STAT 進程狀態
WCHAN 正在等待的進程資源
START 啟動進程的時間
TIME 進程消耗CPU的時間
COMMAND 命令的名稱和參數

 

狀態 解釋
R Running.運行中
S Interruptible Sleep.等待調用
D Uninterruptible Sleep.不可中斷睡眠
T Stoped.暫停或者跟蹤狀態
X Dead.即將被撤銷
Z Zombie.僵屍進程
W Paging.內存交換
N 優先級低的進程
< 優先級高的進程
s 進程的領導者
L 鎖定狀態
l 多線程狀態
+ 前台進程

 

通過 pstree 可以很直接的看到相同的進程數量,最主要的還是我們可以看到所有進程之間的相關性。

kill 命令的掌握:
#首先我們使用圖形界面打開了 gedit、gvim,用 ps 可以查看到 ps aux
#使用9這個信號強制結束 gedit 進程 kill -9 1608
#我們再查找這個進程的時候就找不到了 ps aux | grep gedit

 

進程的執行順序

 

當然就是靠該進程的優先級值來判定進程調度的優先級,而優先級的值就是上文所提到的 PR 與 nice 來控制與體現了

而 nice 的值我們是可以通過 nice 命令來修改的,而需要注意的是 nice 值可以調整的范圍是 -20 ~ 19,其中 root 有着至高無上的權力,既可以調整自己的進程也可以調整其他用戶的程序,

並且是所有的值都可以用,而普通用戶只可以調制屬於自己的進程,並且其使用的范圍只能是 0 ~ 19,因為系統為了避免一般用戶搶占系統資源而設置的一個限制,用 renice 來修改已經存在的進程的優先級

 

日志系統:

日志數據可以是有價值的信息寶庫,也可以是毫無價值的數據泥潭。它可以記錄下系統產生的所有行為,並按照某種規范表達出來。我們可以使用日志系統所記錄的信息為系統進行排錯,優化系統的性能,

或者根據這些信息調整系統的行為。收集你想要的數據,分析出有價值的信息,可以提高系統、產品的安全性,還可以幫助開發完善代碼,優化產品。日志會成為在事故發生后查明“發生了什么”的一個很好的“取證”信息來源。

日志可以為審計進行審計跟蹤。

在 Linux 中大部分的發行版都內置使用 syslog 系統日志,那么通過前期的課程我們了解到常見的日志一般存放在 /var/log 中。

日志名稱 記錄信息
alternatives.log 系統的一些更新替代信息記錄
apport.log 應用程序崩潰信息記錄
apt/history.log 使用 apt-get 安裝卸載軟件的信息記錄
apt/term.log 使用 apt-get 時的具體操作,如 package 的下載、打開等
auth.log 登錄認證的信息記錄
boot.log 系統啟動時的程序服務的日志信息
btmp 錯誤的信息記錄
Consolekit/history 控制台的信息記錄
dist-upgrade dist-upgrade 這種更新方式的信息記錄
dmesg 啟動時,顯示屏幕上內核緩沖信息,與硬件有關的信息
dpkg.log dpkg 命令管理包的日志。
faillog 用戶登錄失敗詳細信息記錄
fontconfig.log 與字體配置有關的信息記錄
kern.log 內核產生的信息記錄,在自己修改內核時有很大幫助
lastlog 用戶的最近信息記錄
wtmp 登錄信息的記錄。wtmp可以找出誰正在進入系統,誰使用命令顯示這個文件或信息等
syslog 系統信息記錄

 

日志的產生實現可以通過兩種方式:

  • 一種是由軟件開發商自己來自定義日志格式然后指定輸出日志位置;
  • 一種方式就是 Linux 提供的日志服務程序,而我們這里系統日志是通過 syslog 來實現,提供日志管理服務。

首先我們來看 rsyslog 的配置文件是什么樣子的,而 rsyslog 的配置文件有兩個,

  • 一個是 /etc/rsyslog.conf
  • 一個是 /etc/rsyslog.d/50-default.conf

第一個主要是配置的環境,也就是 rsyslog 加載什么模塊,文件的所屬者等;而第二個主要是配置的 Filter Conditions


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM