2007年10月28日 星期日

行程 (process) 的意義

Linux 整個運作建立在「行程」的觀念上,對核心而言,於系統上運作的每一個「程式」( program ),無論是命令 (command),應用程式 (application),程序稿 (script),全都是行程的組合。

舉例而言,在你登入系統之前,終端機是由 getty 行程所監控,登入之後,gtty 會自我中斷,並將終端機的掌控權交給 shell 接管 ( shell 是另一個行程 ),而你在 shell 中所見入的每個命令,都會觸發一個或多個行程,某些行程還會衍生新的行程,稱為子行程。
shell 的內建命令,如 cd,echo,jobs... 等,並不會被啟動成子行程,因為他們原本就是 shell 行程的一部分。

如果要知道有哪些行程正在執行,可參考 ps 命令。
bang@linuxdiary:~$ ps
PID TTY TIME CMD
7773 pts/0 00:00:00 bash
7789 pts/0 00:00:00 ps
  • PID (Process ID,行程識別碼):當行程被啟動,會被賦予一個 ID 為識別碼,每個行程都有自己所屬的 ID,管理者可 PID 來傳送信號給這些行程。
  • TTY 控制終端機:在何種終端機上面運作,若與終端機無關,則顯示 ?。tty1-tty6 是本機上面的登入者程序 (Ctrl + Alt + Fn),若為 pts/0 等等的,則表示為由網路連接進主機的程序,若為 ? 則代表背景執行程式。
  • TIME:目前為止所占用 CPU 的時間,使用者於命令列觸發的行程 (如 ls),他們的「生命期」多半相當短暫。但是對於提供公共服務的行程 (如 Apache web server),他們的生命期就相當長,甚至是在系統啟動之後就開始,直到關機或管理者給予結束才終止。
  • STAT (狀態):常見的狀態有
    • R (running):目前正在運作,或者在佇列中等待運作。
    • S (sleep):睡眠狀態,等待某些事件的完成,可被某些訊號 (signal) 喚醒。
    • T (terminable):停止了或該程序被其工作控制著。
    • Z (zombie):僵屍程序,應該已終止,但是其父程序卻無法正常的終止他。
    • <:高優先權的程序
    • N:低優先權的程序
    • +:在前景程序群組的程序 (如正在前景執行的程序)。
    • s:本程序為 session leader
  • CMD:命令名稱

沒有留言: