在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ 進(jìn)程狀態(tài)
信號(hào)
創(chuàng)建目錄權(quán)限
示例程序
進(jìn)程的定義
Hello World進(jìn)程
創(chuàng)建進(jìn)程
進(jìn)程鎖
第四章 項(xiàng)目實(shí)例Run
Nohup命令
PID
前言
系統(tǒng)調(diào)用sendfile
進(jìn)程參數(shù)
參考書籍
后記
進(jìn)程狀態(tài)
本書概述
寫時(shí)復(fù)制(Copy On Write)
Docker簡(jiǎn)介
第五章 注意事項(xiàng)
實(shí)現(xiàn)Run
孤兒進(jìn)程概念
共享內(nèi)存
衍生(Spawn)新進(jìn)程
PPID
第三章 進(jìn)程進(jìn)階
退出碼
簡(jiǎn)介
進(jìn)程文件
Thanks for reading!
項(xiàng)目學(xué)習(xí)
第一章 進(jìn)程基礎(chǔ)
僵尸進(jìn)程
系統(tǒng)調(diào)用
POSIX簡(jiǎn)介
執(zhí)行(Exec)外部程序
文件描述符
進(jìn)程名字
進(jìn)程輸入與輸出
Cgroups
進(jìn)程間通信
查看PID
死鎖概念
進(jìn)程越多越好?
Run項(xiàng)目架構(gòu)
  • 1.
復(fù)制(Fork)進(jìn)程
第二章 Go編程實(shí)例
活鎖概念
守護(hù)(Daemon)進(jìn)程
并發(fā)與并行
捕獲SIGKILL
Namespaces簡(jiǎn)介

進(jìn)程狀態(tài)

進(jìn)程狀態(tài)

根據(jù)進(jìn)程的定義,我們知道進(jìn)程是代碼運(yùn)行的實(shí)體,而進(jìn)程有可能是正在運(yùn)行的,也可能是已經(jīng)停止的,這就是進(jìn)程的狀態(tài)。

網(wǎng)上有人總結(jié)進(jìn)程一共5種狀態(tài),也有總結(jié)是8種,究竟應(yīng)該怎么算呢,最好的方法還是看Linux源碼。進(jìn)程狀態(tài)的定義在fs/proc/array.c文件中。

/*
* The task state array is a strange "bitmap" of
* reasons to sleep. Thus "running" is zero, and
* you can test for combinations of others with
* simple bit tests.
*/
static const char * const task_state_array[] = {
  "R (running)",        /*   0 */
  "S (sleeping)",       /*   1 */
  "D (disk sleep)", /*   2 */
  "T (stopped)",        /*   4 */
  "t (tracing stop)",   /*   8 */
  "X (dead)",       /*  16 */
  "Z (zombie)",     /*  32 */
};

這真的是Linux的源碼,可以看出進(jìn)程一共7種狀態(tài),含義也比較清晰,注意其中D(disk sleep)稱為不可中斷睡眠狀態(tài)(uninterruptible sleep)。

知道進(jìn)程狀態(tài)本身沒什么

進(jìn)程狀態(tài)轉(zhuǎn)換

http://wiki.jikexueyuan.com/project/linux-process/images/status_transform.svg" alt="" />

使用Ptrace

include/linux/sched.h

struct task_struct {
  volatile long state;  /* -1 unrunnable, 0 runnable, >0 stopped */
  void *stack;
  atomic_t usage;
  unsigned int flags;   /* per process flags, defined below */
  unsigned int ptrace;

查看狀態(tài)

通過ps aux可以看到進(jìn)程的狀態(tài)。

O:進(jìn)程正在處理器運(yùn)行,這個(gè)狀態(tài)從來沒有見過.
S:休眠狀態(tài)(sleeping)
R:等待運(yùn)行(runable)R Running or runnable (on run queue) 進(jìn)程處于運(yùn)行或就緒狀態(tài)
I:空閑狀態(tài)(idle)
Z:僵尸狀態(tài)(zombie)
T:跟蹤狀態(tài)(Traced)
B:進(jìn)程正在等待更多的內(nèi)存頁
D: 不可中斷的深度睡眠,一般由IO引起,同步IO在做讀或?qū)懖僮鲿r(shí),cpu不能做其它事情,只能等待,這時(shí)進(jìn)程處于這種狀態(tài),如果程序采用異步IO,這種狀態(tài)應(yīng)該就很少見到了

其中就緒狀態(tài)表示進(jìn)程已經(jīng)分配到除CPU以外的資源,等CPU調(diào)度它時(shí)就可以馬上執(zhí)行了。運(yùn)行狀態(tài)就是正在運(yùn)行了,獲得包括CPU在內(nèi)的所有資源。等待狀態(tài)表示因等待某個(gè)事件而沒有被執(zhí)行,這時(shí)候不耗CPU時(shí)間,而這個(gè)時(shí)間有可能是等待IO、申請(qǐng)不到足夠的緩沖區(qū)或者在等待信號(hào)。

狀態(tài)轉(zhuǎn)換

進(jìn)程的運(yùn)行過程也就是進(jìn)程狀態(tài)轉(zhuǎn)換的過程。

例如就緒狀態(tài)的進(jìn)程只要等到CPU調(diào)度它時(shí)就馬上轉(zhuǎn)為運(yùn)行狀態(tài),一旦它需要的IO操作還沒有返回時(shí),進(jìn)程狀態(tài)也就轉(zhuǎn)換成等待狀態(tài)。

進(jìn)程狀態(tài)間轉(zhuǎn)換還有很多,這里不一一細(xì)敘,馬上去學(xué)習(xí)進(jìn)程退出碼吧。