1. 程式人生 > >Linux程序管理及相關命令

Linux程序管理及相關命令

一些概念

終端

也叫終端裝置,早期因為計算機比較昂貴,所以一個主機會有多個終端,這些終端本身不具備計算能力,僅僅承擔資訊的輸入與輸出工作,運算和處理均由主機來完成。
現在個人計算機也可以執行終端模擬程式來模擬一個終端來工作。
隨著計算機的發展,移動終端也有了廣泛應用,不僅有可以進行輸入輸出的工作,也可以進行一定的運算,實現部分系統的功能。

程序的許可權

參看Linux下程序許可權分析
一般程序有3個uid,分別為ruid(真實使用者ID),euid(有效使用者ID),suid(儲存使用者ID)
setuid(uid)
當你是root時,可以用這個函式把自己變成ID為uid的使用者,並且不可以返回再成為root。即你是root時,使用這個函式你的ruid,euid,suid都變了
seteuid(euid)


但是你用這個函式時,你的ruid,suid還是0,改變的只是你的euid。這樣你可以返回成為root。

另外有一個設定使用者ID(set uid),這個是對應的檔案的9個許可權中第三個欄位。如果一個二進位制檔案設定設定使用者ID,那麼如果非該檔案所有者具有該檔案的x許可權,且要執行這個檔案,那麼執行時生成的程序的euid就是該檔案的所有者

許可權的繼承
當使用fork子程序的時候,子程序全部繼承父程序四個uid,和父程序uid相同;當使用exec系列函式時候,會把suid置為euid。

例子說明:
比如登入時,不同的使用者獲取bash shell時,生成的shell是不同的。會根據使用者的身份資訊來生成具有不同許可權的shell。

系統或網路服務

常駐在記憶體中的程序。也叫daemon。

工作管理

進行工作管理時,每個工作都是目前bash的子程式。也就是說不同的終端之間是不可以互相管理的。每個bash只能管理自己的工作,而不可以去管理其他的bash的工作。

概念

前臺:就是出現提示字元讓你操作的環境
後臺:揹著你執行的環境,這裡的工作是不可以通過ctrl+c來打斷的,也就是說你不可以互動的與後臺中的工作互動。

job control管理

後臺中的job的狀態:
在後臺裡面的工作,他的狀態一般有Stop,Running。

如何講一個job放到後臺處理
1.
可以在指令的最末尾加上 &來將工作新增到後臺去處理。
比如:
這裡寫圖片描述


注意
[1] 8400
這裡1是工作的job ID,用來標識一個工作。
8400這是這個工作對應的程序的PID

2.
對於當前正在處理的工作可以使用ctrl+z來把當前的工作放到後臺。

jobs命令

用途:
觀察目前後臺中job的狀態
這裡寫圖片描述
注意這裡
[1]- 10314
[2]+ 10833

+:表示的是最近放到後臺的job ID
-:最近最後第二個被放到後臺的job ID

fg指令

用途:
將後臺的工作放到前臺來

fg %jobID

bg指令

用途:
讓工作在背景下的狀態變為工作中。因為有的job在後臺是Stopped,我們可以用這個指令來讓你Run起來。

bg %jobID

離線管理job

注意在後臺的job是在終端模式下的,並不是在系統的後臺中。即若我們是遠端連線到Linux主機的,當我們離線之後,在後臺的工作都會被中斷。所以為了避免這個情況,我們可以使用nohup指令。

nohup [指令與引數] & /* 將指令放到系統後臺去 */
nohup [指令與引數]   /* 將指令放在前臺中執行 */

程序管理

程序觀察指令

ps指令
這裡寫圖片描述

例子:

ps -l /* 只是看自己bash中的任務 */

這裡寫圖片描述
F:process flag,說明這個程序的總結許可權。

  • 若為4表示該程序許可權為root
  • 若為1表示此子程序僅僅使用了fork而沒有執行exec

S:表示這個程序的狀態,主要有

  • R:執行
  • S:睡眠,可以被喚醒
  • D:不可以被喚醒的睡眠
  • T:停止
  • Z:殭屍狀態

UID/PID/PPID

C:cpu使用率,單位為百分比

PRI/NI:優先順序

PRI(new) = PRI(old) + nice
PRI越低說明優先順序越高。

ADDR/SZ/WCHAN:

  • ADDR:指出該程序在記憶體中的哪個部分
  • SZ:代表這個程序用掉了多少記憶體
  • WCHAN:表示目前程序是否執行中

TTY:登入者的終端機的位置,若是遠端則為(pts/n)

TIME:使用掉的CPU時間

CMD:造成這個程序觸發的指令是什麼

ps aux

這裡寫圖片描述

top指令
動態觀察程式的變換

這裡寫圖片描述

例子:
這裡寫圖片描述

第一行(top)顯示的資訊分別是:

  • 目前時間
  • 開機到目前所經過的時間
  • 已經登入到系統的使用者個數
  • 系統在1,5,15分鐘的平均負載。

第二行(Tasks)顯示的資訊分別是:
目前程序的總量,與他們分別都是什麼狀態

第三行(Cpus)顯示的資訊是CPU的整體負載

第四行與第五行:表示的是目前的物理與虛擬記憶體的使用情況。

第六行
這裡寫圖片描述

pstree
形成一個樹狀的程序關係圖。
這裡寫圖片描述

程序的管理

程序之間是可以互相控制的。可以通過kill命令來發送訊號。

kill -signal PID
killall -signal 指令名稱

程序優先順序

nice命令

nice [-n 數字] command

-n :後面接一個數字,數值的範圍-20~19
注意一般使用者只可以調整自己程序的nice值,範圍為0~19,即只會把自己程序的優先順序調低。
command:因為執行一個command就當於啟動了一個子程序,所以這裡nice就是相當於給這個子程序設定nice值。

renice命令

reniec [number] PID

調整PID的nice值為number