日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

Linux 进程状态详解

發(fā)布時(shí)間:2024/10/14 linux 96 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 进程状态详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目的

為了對(duì)進(jìn)程從產(chǎn)生到消亡的整個(gè)過(guò)程進(jìn)行跟蹤和描述,就需要定義各種進(jìn)程的各種狀態(tài)并制定相應(yīng)的狀態(tài)轉(zhuǎn)換策略,以此來(lái)控制進(jìn)程的運(yùn)行。

粗略分類(lèi)

  • ???????運(yùn)行態(tài):進(jìn)程占用 CPU,并在 CPU 上運(yùn)行;
  • ???????就緒態(tài):進(jìn)程已經(jīng)具備運(yùn)行條件,但是 CPU 還沒(méi)有分配過(guò)來(lái);
  • ???????阻塞態(tài):進(jìn)程因等待某件事發(fā)生而暫時(shí)不能運(yùn)行;
  • 當(dāng)然理論上上述三種狀態(tài)之間轉(zhuǎn)換分為六種情況;

  • 運(yùn)行 → 就緒:這是有調(diào)度引起的,主要是進(jìn)程占用 CPU 的時(shí)間已耗盡。
  • 就緒 → 運(yùn)行:當(dāng)前運(yùn)行的進(jìn)程的時(shí)間片用完,調(diào)度就從就緒隊(duì)列中選擇合適的進(jìn)程分配給 CPU。
  • 運(yùn)行 → 阻塞:發(fā)生了 I/O 請(qǐng)求或等待某件事的發(fā)生。
  • 阻塞 → 就緒:進(jìn)程所等待的事件發(fā)生,就進(jìn)入就緒隊(duì)列。
  • 以上4種情況可以相互正常轉(zhuǎn)換,不是還有兩種情況嗎?

  • 阻塞 → 運(yùn)行:即使給阻塞進(jìn)程分配 CPU,也無(wú)法執(zhí)行,操作系統(tǒng)進(jìn)行調(diào)度時(shí)不會(huì)從阻塞隊(duì)列進(jìn)行挑選,其調(diào)度的選擇對(duì)象為就緒隊(duì)列
  • 就緒 → 阻塞:因?yàn)榫途w態(tài)根本就沒(méi)有執(zhí)行,何來(lái)進(jìn)入阻塞態(tài)??
  • 詳細(xì)分類(lèi)

    現(xiàn)在知道了進(jìn)程的三種基本狀態(tài),但是在操作系統(tǒng)具體現(xiàn)實(shí)中,設(shè)計(jì)者可以根據(jù)實(shí)際情況設(shè)置不同的狀態(tài),這樣以來(lái)就出現(xiàn)了以下幾種狀態(tài):

  • 可運(yùn)行態(tài):運(yùn)行態(tài)和就緒態(tài)的合并,表示進(jìn)程正在運(yùn)行或準(zhǔn)備運(yùn)行,Linux 中使用 TASK_RUNNING 宏表示此狀態(tài)。
  • 淺度睡眠態(tài):進(jìn)程正在睡眠(被阻塞),等待資源到來(lái)是喚醒,也可以通過(guò)其他進(jìn)程信號(hào)或時(shí)鐘中斷喚醒,進(jìn)入運(yùn)行隊(duì)列。Linux 使用 TASK_INTERRUPTIBLE 宏表示此狀態(tài)。
  • 深度睡眠態(tài):其和淺度睡眠基本類(lèi)似,但有一點(diǎn)就是不可其他進(jìn)程信號(hào)或時(shí)鐘中斷喚醒。Linux 使用 TASK_UNINTERRUPTIBLE 宏表示此狀態(tài)。
  • 暫停狀態(tài):進(jìn)程暫停執(zhí)行接受某種處理。如正在接受調(diào)試的進(jìn)程處于這種狀態(tài),Linux 使用 TASK_STOPPED 宏表示此狀態(tài)。
  • 僵死狀態(tài):進(jìn)程已經(jīng)結(jié)束但未釋放 PCB,Linux 使用 TASK_ZOMBIE 宏表示此狀態(tài)。
  • 我們可以來(lái)看下以上宏在內(nèi)核中的定義:

    #define TASK_RUNNING??????????? 0 #define TASK_INTERRUPTIBLE????? 1 #define TASK_UNINTERRUPTIBLE??? 2 #define __TASK_STOPPED????????? 4 #define __TASK_TRACED?????????? 8 /* in tsk->exit_state */進(jìn)程的退出狀態(tài) #define EXIT_ZOMBIE???????????? 16 #define EXIT_DEAD?????????????? 32 /* in tsk->state again */我理解為進(jìn)程的喚醒狀態(tài) #define TASK_DEAD?????????????? 64 #define TASK_WAKEKILL?????????? 128 #define TASK_WAKING???????????? 256 #define TASK_STATE_MAX????????? 512 #define TASK_STATE_TO_CHAR_STR "RSDTtZXxKW"

    LINUX進(jìn)程間狀態(tài)轉(zhuǎn)換和內(nèi)核調(diào)用圖

    ?

    (SAW:Game Over!)

    總結(jié)

    以上是生活随笔為你收集整理的Linux 进程状态详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。