一、程序
1、什麼是程序
程序(process)是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是
作業系統
結構的基礎。在早期面向程序設計的計算機結構中,程序是程式的基本執行實體;在當代面向執行緒設計的計算機結構中,程序是執行緒的容器。程式是指令、資料及其組織形式的描述,程序是程式的實體。
在linux系統當中,觸發乙個事件,系統會將他定義成乙個程序,執行者的許可權與屬性資訊,程式的**和所需的資料資訊都會被載入到記憶體,核心會給程序分配一定的記憶體空間,並且給予這個程序乙個id,這個id 我們稱之為pid ,即程序號,從此以後這個pid 就能在系統上進行一些特定操作。程序的擁有者是是該程序的發起者。
2、程序的建立
init:第乙個程序
父子關係
程序:都由其父程序建立,cow
fork(), clone()
3、程序的優先順序
3.1系統優先順序:數字越小,優先順序越高
0-139(centos4,5)
各有140個執行佇列和過期佇列
0-98,99(centos6)
pri 檢視當前程序的優先順序
3.2實時優先順序: 99-0 值最大優先順序最高
rtprio 檢視實時優先順序
3.3nice值:-20到19,對應系統優先順序100-139或99
nice 檢視當前程序的nice值
3.4 big o:時間複雜度,用時和規模的關係
o(1), o(logn), o(n)線性, o(n^2)拋物線, o(2^n)
4、程序被核心排程過程中的狀態
4.1 執行態:running(r)
4.2 就緒態:ready
4.3 睡眠態:
可中斷:interruptable(s)
不可中斷:uninterruptable(d)
4.4 停止態:stopped,暫停於記憶體,但不會被排程,除非手動啟動(t)
4.5 僵死態:zombie,結束程序,父程序結束前,子程序不關閉(z)
有些程序狀態之後會有以下字母:
+: 前台程序,佔據著某終端
l: 多執行緒程序
l:記憶體分頁並帶鎖
n:低優先順序程序
<:>
s: session leader,會話(子程序)發起者
5、程序的分類
守護程序: daemon,在系統引導過程中啟動的程序,和終端無關程序
注意:兩者可相互轉化
6、程序的管理
linux系統狀態的檢視及管理工具:pstree, ps, pidof, pgrep, top, htop, glance,pmap, vmstat,dstat,kill,pkill,job, bg, fg, nohup
6.1程序的檢視工具
6.1.1 pstree 程序狀態
6.1.2 ps 檢視程序資訊(常用組合方式)
ps -ef以完整的資訊顯示所有的程序資訊程序管理工具
ps -axo 顯示特定的資訊如pid 、comm、%cpu、%mem、state 、tty、euser、ruser
ps -c f1.sh
6.1.3 pgrep程序搜尋
ps選項|其他命令
[root@centos6 ~]# pgrep -lu root 知道使用者名稱的程序[root@centos6 ~]#pgrep -p 1800 顯示子程序[root@centos6 ~]#pgrep -a "vi.*" 支援正則[root@centos6 ~]#pgrep -a "bash" 顯示完整格式的程序名6.1.4按確切的程式名稱顯示: /sbin/pidof
[root@centos6 ~]# pidof bash 檢視程式對應的程序編號6.2系統監控工具ps 顯示的只是系統某一時間點的程序狀態資訊,在實際應用中,我們需要動態的監控程序的執行狀態,此時就需要另乙個命令top,htop是增強版的top
6.2.1top
-d指定重新整理時間間隔,預設為3s
-b全部顯示所有程序
-n重新整理多少次後退出
-d指定延遲時間
-u僅顯示指定使用者程序
-s 以指定字段排序
子命令s跟蹤選定程序的系統呼叫
l顯示選定程序開啟的檔案列表
a將選定的程序繫結至某指定cpu核心
t顯示程序樹
6.2.3 glances 用於監控
c/s模式下執行glances命令
伺服器模式:
glances -s -b ipaddr ipaddr: 指明監聽的本機哪個位址
客戶端模式:
6.2.4 dstat 系統資源統計,代替vmstat,iostat用於監控系統執行狀況並且用於基準測試和故障排除
6.3 程序的管理工具
6.3.1kill
向程序傳送一些控制訊號,來完成對程序的管理控制,每個訊號對應乙個數字
訊號名稱以sig開頭(可省略),不區分大小寫
顯示當前系統可用訊號: kill –l,trap -l
常用訊號:man 7 signal
1) sighup: 無須關閉程序而讓其重讀配置檔案
2) sigint: 中止正在執行的程序;相當於ctrl+c
3) sigquit:相當於ctrl+\
9) sigkill: 強制殺死正在執行的程序
15) sigterm:終止正在執行的程序
18) sigcont:繼續執行
19) sigstop:後台休眠
指定訊號的方法:
(1) 訊號的數字標識:1, 2, 9
(2) 訊號完整名稱:sighup
(3) 訊號的簡寫名稱:hup
二、作業管理
通過對程序的學習我們知道在登入系統之後的每乙個工作程序都是當前bash 的子程序,那麼每乙個子程序能否同時執行呢?顯然是可以的,此時我們就需要對這些作業進行管理,將一部分放在後台執行,同時在前台編輯檔案,完成後把作業調回前台執行
前台作業:通過終端啟動,且啟動後一直佔據終端;
後台作業:可通過終端啟動,但啟動後即轉入後台執行(釋放終端)
1、如何讓作業執行於後台?
(1) 執行中的作業: ctrl+z
(2) 尚未啟動的作業: command &
2、如何讓作業與終端無關?
後台作業雖然被送往後台執行,但其依然與終端相關;退出終端,將關閉
後台作業。如果希望送往後台後,剝離與終端的關係
nohup command &將對應的作業任務放在後台執行
screen;command
3、作業控制命令
fg [[%]job_num]:把指定的後台作業調回前台
bg [[%]job_num]:讓送往後台的作業在後台繼續執行
kill [%job_num]: 終止指定的作業
4、並行執行
同時執行多個程序,提高效率
方法1(編寫指令碼)
vi all.sh
f1.sh&
f2.sh&
f3.sh&
方法2(f1.sh&);(f2.sh&);(f3.sh&)
方法3例:並行執行
& &
程序和作業管理
init命令是linux下的程序初始化工具,init程序是所有linux程序的父程序,它的程序號為1。init命令是linux作業系統中不可缺少的程式之一,init程序是linux核心引導執行的,是系統中的第乙個程序。語法 init 選項 引數 選項 b 不執行相關指令碼而直接進入單使用者模式 s ...
程序和作業管理之renice
renice命令可以修改正在執行的程序的排程優先順序。預設是以程式識別碼指定程式調整其優先權,您亦可以指定程式群組或使用者名稱調整優先權等級,並修改所有隸屬於該程式群組或使用者的程式的優先權。只有系統管理者可以改變其他使用者程式的優先權,也僅有系統管理者可以設定負數等級。語法 renice 選項 引...
程序和作業管理之ps
ps命令用於報告當前系統的程序狀態。可以搭配kill指令隨時中斷 刪除不必要的程式。ps命令是最基本同時也是非常強大的程序檢視命令,使用該命令可以確定有哪些程序正在執行和執行的狀態 程序是否結束 程序有沒有僵死 哪些程序占用了過多的資源等等,總之大部分資訊都是可以通過執行該命令得到的。語法 ps 選...