1. 程式人生 > >linux 基礎12-程式與資源管理

linux 基礎12-程式與資源管理

1、基礎概念

2、作業管理

3、程序管理

1. 基礎概念

  • 可執行的二進位制檔案就是程式
  • 執行程式的時候因觸發事件而獲取的ID,稱為PID
  • 在登入並執行bash時,系統依據登入者的UID/GID給登入者一個PID/GPID/SID等
  • 啟動程式時,根據啟動這個程式的使用者和相關屬性關係,給這個PID一組有效的全線設定。每個程式都有三組許可權,每組都具有r/w/r的許可權,所以:不同的使用者身份執行某個程式時,系統給予的許可權也都不同。
  • 子程式與父程式:我們登入系統後,會取得一個bash shell的PID,我們可以用bash提供的介面去執行另一個程式,那些另外執行的程式也會獲得一個PID,這個PID就是子程式,而在我們的bash環境,就稱為父程式。
  • 常駐在記憶體的程式有哪些:
  • ls、touch、rm等執行完就退出記憶體了
  • 系統或者網路服務crond atd,syslog,Apache,named,vsftpd等是常駐記憶體的。

2. 作業管理

  • 登入系統取得bash shell之後,在單一終端介面下,同時管理多個作業。
  • 要進行bash的作業管理,需要注意到的限制是
  • 程式必須是shell的子程式
  • 程式不能等待terminal/shell的輸入

2.1 &:

  • 直接將命令放到後臺中“執行”的&:
  • 前臺:使用者可以控制的作業就是前臺錯也
  • 後臺:在記憶體可以自行執行的作業,使用者無法直接控制他,除非用bg/fg等指令來將該作業調用出來
  • 如果前臺執行的話,程式在結束之前不能進行其他的操作
  • 程式在後臺執行則可以同時進行其他命令比如:ls等
    tar -zcf etc.tar.gz /etc >log.txt 2>&1 &

2.2 [ctrl] -z:

  • 把程式從前臺暫停到後臺,

2.3 jobs:

jobs  #等效於jobs -s
jobs -l #還會小時程序號
jobs -r  #顯示正在執行的

2.4 fg:


fg %+ #預設呼叫+的作業
fg %%
fg %1 #執行作業號為1的作業

2.5 bg:

  • 讓後臺暫停的作業在後臺記憶體中執行

    find /-perm -4000
    然後暫停它
    jobs
    bg %之前暫停作業的作業號

2.6 kill:

  • 使用kill -l

  • 使用kill -9 程序號或者作業號,對應的.swp檔案不會刪除
  • 使用kill -15 程序號或者作業號,對應的.swp檔案不會刪除

    kill -9 %3

3. 程序管理

  • 為什麼程序管理這麼重要
  • 如果linux系統很繁忙,當整個系統資源快被耗盡的時候,我們應該找出最耗系統的那個程序,然後刪除該程序或者降低它的執行許可權,讓系統恢復正常
  • 如果某個程式僵死,導致程式一直在記憶體當中,我們應該將其找到並殺死
  • 如果系統中同時又五六項作業在執行,但是其中有一項作業非常重要,那麼,如何讓這項重要的工作被最優先執行呢

3.1 程序的觀察ps、top、pstree:

  • ps靜態的檢視程序
  • top動態的檢視程序
  • pstree來查閱程式之間的關係

  • F是標誌的意思,4表示root使用者
  • S是state狀態的意思,S表示sleeping,R表示running,T表示停止的意思,Z表示zombie僵死了。
  • PPID是程序的副程序
  • C所佔的cpu的百分比
  • PRI是priority優先順序的意思
  • NI是nice謙讓值的意思
  • ADDR程序所在的位置,如果在執行就顯示-號
  • SZ表示程序所佔用的記憶體大小
  • WATCH表示執行的狀態,-號代表正在執行,wait代表正在等待
  • TTY代表登入狀態,
  • CMD,是command的縮寫
  • VSZ,虛擬記憶體佔用大小
  • RSS,所佔用記憶體頁數
  • ps aux | head

    ps -axjf #顯示樹狀結構
    ps -lA | cat -n
    ps -aux | cat -n
    ps -le | cat -n

  • load average 分別表示1分鐘,5分鐘,15分鐘的負載
  • Men、Swap:物理、虛擬記憶體使用
  • Cpu:us、sy、ni、id、wa、hi、si、st分別為使用者佔用、系統佔用、nice佔用、id空閒佔用、wa等待輸入輸出佔用、hi硬體中斷佔用、si軟中斷佔用

3.2 killall:

service httpd start
kill -9 'ps aux| grep httpd| grep -v 'grep'| awk '{print $2}''#用kill命令殺死httpd挺麻煩的。
killall -9 httpd

3.3 系統資源的觀察:free、uname、dmesg、sar:

3.4 netstat、:

netstat | nl
netstat | head

3.5 程序的執行順序、: