Try   HackMD

Linux 的 Process Management

tags: Linux

一 . Process in Linux

(一) . Process的概念

  • 什麼是Process :
    1. 定義 : Program in execute。正在執行的程式。
    2. Program的定義:some binary file storage in disk。
    3. 兩個重要的不同 : 有沒有執行,在執行的程序還會有多個重要的屬性。
  • Process 的屬性 : 大概就是htop或top中可以看到的。
    1. 使用者相關id : uid、gid(這個可執行檔的擁有者)。Euid、Guid等等。
    2. 程序相關id : pid、ppid。
    3. 其他 : nice值、priority值。
  • 註 : EUID和GUID
    1. EUID : 和setuid有關,可以讓任何可執行此命令的user在執行的時候,都有file owner的權限。

(二) . fork and exec Modal

二 . Singal 和 Process state

(一) . Singal

  • 程序間的溝通 : Singal
    1. 目的 : 用於Linux系統中不同程序的溝通。
    2. 可能由user或kernal(系統)發出。
  • Handler : 程序接收不同singal時所要做出來的行為。
    1. 每一個Process都可以設定自己得handler,或系統進行default actions。
    2. Catch狀態 : 代表這個時候的process都會接收其他process的singal並處理。
    3. Block狀態 : 代表這個時候的process暫時不會接收其他process的singal和處理。通常要保證某些事不被中斷。
    • 註 : 在block的process若在block時收到多個同樣的訊號,unblock時只會進行一個。
    1. ignore訊號的方法 : 自己寫一個什麼都不做的handler。
  • Signal List : Linux 規定的訊號種類
  • Kill 指令: 其實就是發出Signal。
    1. 指定singal : 可以在kill後面加上 -signal 參數,表示要發出哪一個singal。
    2. 指定程序 : 不在參數後面加入singal number就是process的pid。
    • 注意 : 分清楚哪邊是pid哪邊是singal number。
    1. killall : 可以照『程序名稱』(非pid)結束程式。例如結束所有以『bash』開頭的process可以用『killall bash』。

(二) . Process State

  • Process state的查看:
    1. ps 指令 : 一次列出『目前』所有的process的資訊,不是動態的。
    2. top指令 : 可以動態列出程序的資訊。
    3. 常見的狀態 : 在process state的STAT欄位可以看到。
  • NI值和PRI值 :
    1. NI值 : 代表process的『nice』值,數值越高代表越可能讓其他程序先使用CPU。
    2. PRI值 : 代表process實際的優先序,由kernal決定,使用者無法調整(even root)。
  • renice指令 : 可以調整程序的nice值。
    1. Nice值 : 可以調整的範圍為-20 到 19。
    2. 一般使用者的nice權限 : 只可以調整成高於現在的nice值,且只可以調成0-19。
    3. root : 可以調整所有的範圍,所有的process。
  • nice指令 : 設定一個初始nice值執行command。

(三) . 時間性的程序管理

  • 時間性的程序管理 :是什麼?要怎麼設定。
    1. 時間性的程序管理 : 代表系統要執行的daily rountine。可能為收一個檔案,或開起或關閉一個服務等等。
    2. 設定檔 : 每一個user的home下面都有一個file可以修改設定,但在root下也有一個/etc/crontab為全域的設定。
  • 檔案格式 :
    1. 忽略空白格,可以用『#』註解整行,可以設定key-value值。
    2. 格式 : 分 時 日 月 星期 指定個格式。注意,星期不可以和日月同時出現。
  • 常用的簡寫 - matching File :
    1. 『*』 : 都是。
    2. 『-』 : 範圍的聯繫詞。
    3. 『,』 : 分格資料的方法。
    4. 『/』 : divide by。
  • 常見的簡寫 - Entry :
  • 編寫時間性程序的發法 :
    1. 使用指令:crontab -e [-u -user]
    2. 直接用sudo vim更改設定檔。