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

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

她執行了作牛肉蓋澆飯這麼一個程序,最後咱們獲得了這麼一盤牛肉蓋澆飯。它須要去執行,否則它就像一本武功祕籍,放在那裏等人翻看。安全

 

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

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

把牛肉湯汁與飯混合在一塊兒的是一個進程,把飯端上桌的是一個進程。它就像是咱們在看武功祕籍這麼一個過程,而後一個篇章一個篇章地去練。併發

 

簡單來講,程序是爲了完成某種任務而設計的軟件,好比 vim 是程序。什麼是進程呢?進程就是運行中的程序。app

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

  • 動態性:進程的實質是一次程序執行的過程,有建立、撤銷等狀態的變化。而程序是一個靜態的實體。
  • 併發性:進程能夠作到在一個時間段內,有多個程序在運行中。程序只是靜態的實體,因此不存在併發性。
  • 獨立性:進程能夠獨立分配資源,獨立接受調度,獨立地運行。
  • 異步性:進程以不可預知的速度向前推動。
  • 結構性:進程擁有代碼段、數據段、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

相關文章
相關標籤/搜索