程序(procedure):不太精確地說,程序就是執行一系列有邏輯、有順序結構的指令,幫咱們達成某個結果。就如咱們去餐館,給服務員說我要牛肉蓋澆飯,vim
她執行了作牛肉蓋澆飯這麼一個程序,最後咱們獲得了這麼一盤牛肉蓋澆飯。它須要去執行,否則它就像一本武功祕籍,放在那裏等人翻看。安全
進程(process):進程是程序在一個數據集合上的一次執行過程,在早期的UNIX、Linux 2.4及更早的版本中,它是系統進行資源分配和調度的獨立基本單位。session
同上一個例子,就如咱們去了餐館,給服務員說我要牛肉蓋澆飯,她執行了作牛肉蓋澆飯這麼一個程序,而裏面作飯的是一個進程,作牛肉湯汁的是一個進程,多線程
把牛肉湯汁與飯混合在一塊兒的是一個進程,把飯端上桌的是一個進程。它就像是咱們在看武功祕籍這麼一個過程,而後一個篇章一個篇章地去練。併發
簡單來講,程序是爲了完成某種任務而設計的軟件,好比 vim 是程序。什麼是進程呢?進程就是運行中的程序。app
程序只是一些列指令的集合,是一個靜止的實體,而進程不一樣,進程有如下的特性:異步
併發:在一個時間段內,宏觀來看有多個程序都在活動,有條不紊的執行(每一瞬間只有一個在執行,只是在一段時間有多個程序都執行過)工具
並行:在每個瞬間,都有多個程序都在同時執行,這個必須有多個 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 能夠很直接的看到相同的進程數量,最主要的仍是咱們能夠看到全部進程之間的相關性。
固然就是靠該進程的優先級值來斷定進程調度的優先級,而優先級的值就是上文所提到的 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 | 系統信息記錄 |
日誌的產生實現能夠經過兩種方式:
首先咱們來看 rsyslog 的配置文件是什麼樣子的,而 rsyslog 的配置文件有兩個,
/etc/rsyslog.conf
/etc/rsyslog.d/50-default.conf
。第一個主要是配置的環境,也就是 rsyslog 加載什麼模塊,文件的所屬者等;而第二個主要是配置的 Filter Conditions