線程與進程
線程定義
1. 線程是進程中的一個實體,是被系統獨立調度和分派的基本單位。 2. 線程本身不擁有系統資源,只擁有一點兒在運行中必不可少的資源。 3. 但它可與同屬一個進程的其它線程共享進程所擁有的所有資源。 4. 線程也有就緒、阻塞和運行三種基本狀態。
引用異步
Linux進程狀態解析
R (TASK_RUNNING):可執行狀態。 1.正在CPU上執行的進程 2.可執行可是還沒有被調度執行的進程 S (TASK_INTERRUPTIBLE):可中斷的睡眠狀態 處於這個狀態的進程由於等待某某事件的發生(好比等待socket鏈接、等待信號量),而被掛起。 這些進程的task_struct結構被放入對應事件的等待隊列中。 當這些事件發生時(由外部中斷觸發、或由其餘進程觸發),對應的等待隊列中的一個或多個進程將被喚醒 D (TASK_UNINTERRUPTIBLE),不可中斷的睡眠狀態 存在的意義就在於,內核的某些處理流程是不能被打斷的。 若是響應異步信號,程序的執行流程中就會被插入一段用於處理異步信號的流程
T (TASK_STOPPED or TASK_TRACED),暫停狀態或跟蹤狀態 向進程發送一個SIGSTOP信號,它就會因響應該信號而進入TASK_STOPPED狀態。 當進程正在被跟蹤時,它處於TASK_TRACED這個特殊的狀態。 「正在被跟蹤」指的是進程暫停下來,等待跟蹤它的進程對它進行操做。 好比在gdb中對被跟蹤的進程下一個斷點,進程在斷點處停下來的時候就處於TASK_TRACED狀態。 而在其餘時候,被跟蹤的進程仍是處於前面提到的那些狀態。 Z (TASK_DEAD - EXIT_ZOMBIE),退出狀態,進程成爲殭屍進程 進程在退出的過程當中,處於TASK_DEAD狀態。 在這個退出過程當中,進程佔有的全部資源將被回收,除了task_struct結構(以及少數資源)之外。 因而進程就只剩下task_struct這麼個空殼,故稱爲殭屍。 之因此保留task_struct,是由於task_struct裏面保存了進程的退出碼、以及一些統計信息。 而其父進程極可能會關心這些信息。 X (TASK_DEAD - EXIT_DEAD),退出狀態,進程即將被銷燬。