Python php java 程序员 Android 开源 云计算 Ubuntu nginx apache Firefox shell google wordpress 编程 微软 centos linux Windows mysql

linux之文件内容定位

  在Linux系統,C程序總是從main函數開始的,當用戶編寫好的程序在運行的時候,操作系統會使用exec函數運行程序,在調用main   函數之前,exec系統調用會先調用一個特殊的啟動例程。

  由於歷史的原因,大多數的Unix系統的main函數定義。

  進程是linux下資源管理的基本單元,每個進程有自己獨立的運行空間。
  每個進程都有一個獨立的進程控制塊(PCB)來管理每個進程資源。
   進程的資源分為兩大部分:內核空間進程資源 和 用戶空間進程資源。
   其中,內核空間進程資源是指:PCB相關信息,即進程PID、PPID、UID等,包括進程控制塊本身、打開的文件表項等等。簡而言之,    就是內核通過PCB可以訪問到的資源。
   用戶空間進程資源是指:進程的代碼段、數據段、堆、棧,以及可共享訪問的庫的內存空間。這些資源在進程退出的時候主動釋放。

   用戶級進程 在linux 中有如下幾種狀態:就緒/運行狀態、可中斷等待、不可中斷等待、僵死狀態、停止狀態。

TASK_RUNNING:正在運行或處於就緒狀態,就緒狀態意味著進程申請到除了CPU以外的其他所有資源。
TASK_INTERRUPTIBLE:處在等待隊伍,等待喚醒,可被中斷喚醒。
TASK_UNINTERRUPTIBLE:處在等待隊伍,等待喚醒,但是不可以被中斷喚醒。
TASK_ZOMBIE:進程資源用戶空間被釋放,但內核中PCB並沒有被釋放,等待父進程回收。
TASK_STOPPED:進程被外部程序暫停,當再次允許的時候繼續執行。

  內核級進程狀態,多兩種:
  TASK_TRACED、TASK_DEAD

   linux中所有的進程都在上述狀態中不停地切換。由調度算法決定,進程處於何種狀態。

  進程的基本屬性包括:進程號PID、父進程號PPID、進程組號PGID

  進程號是系統維護的唯一標識一個進程的正整數,進程號是無法在用戶層修改的。
父進程號:除了init進程外,其他任何進程都是由另一個進程創建的。被創建的進程稱作子進程,當前進程稱作父進程。父進程無法在用戶層修改。
   進程組號:每一個進程擁有自己的進程組號。進程組是一個或多個進程的集合,他們與同一作業相關聯,可以接收來自同一終端的各種信號。進程組號可以在用戶層修改。
每個進程組都有一個組長進程,組長進程的進程號就是進程組號。組長進程退出,進程組還在,只要進程組有一個進程,則該進程組仍然存在。

   會話:會話是一個或多個進程組集合。

   會話和控制終端有如下特點:
1、一個會話可以有一個控制終端,建立於控制終端連接的會話首進程被稱為控制進程。
2、一個會話中的幾個進程組可被分成為一個前臺進程和幾個後臺進程,如果一個會話有一個控制終端,則它有一個前臺進程。
3、無論何時終端鍵入中斷鍵\退出鍵,會發送中斷信號\退出信號給前臺進程。

延伸阅读

评论