linux信號差解決方案 linux怎么調(diào)試?
linux怎么調(diào)試?1.使用#39print#39語句這是調(diào)試問題的基本方法。我們在程序中可疑的地方插入print語句,了解程序的運行過程,控制流和變量值的變化。它的缺點是需要編輯程序,添加#39pr
linux怎么調(diào)試?
1.使用#39print#39語句
這是調(diào)試問題的基本方法。我們在程序中可疑的地方插入print語句,了解程序的運行過程,控制流和變量值的變化。
它的缺點是需要編輯程序,添加#39print#39語句,并且必須重新編譯重新運行才能得到輸出。如果要調(diào)試的程序很大,這將是一個費時費力的方法。
2、使用查詢
在某些情況下,我們需要了解內(nèi)核中運行的進程的狀態(tài)和內(nèi)存映射。為了獲得這一信息,我們不 不需要在內(nèi)核中插入任何代碼。相反,您可以使用/proc文件系統(tǒng)。在/proc的偽文件系統(tǒng)中,運行信息(cpu信息、內(nèi)存容量等。)在系統(tǒng)開始運行時收集的數(shù)據(jù)被保留。
對于系統(tǒng)中運行的每個進程,ls -l /proc的輸出結(jié)果有一個以/proc文件系統(tǒng)中的進程id命名的項。每個進程的詳細信息可以在進程id對應的目錄下的文件中獲得。您也可以輸出#39ls /proc/pid#39。
免費視頻教程推薦:linux視頻教程
3.使用跟蹤
Strace和ltrace是Linux中用來跟蹤程序執(zhí)行細節(jié)的兩個跟蹤工具。
strac:
Strace截獲并記錄系統(tǒng)調(diào)用和它接收到的信號。對于用戶,它顯示系統(tǒng)調(diào)用、傳遞給它們的參數(shù)和返回值。Strace可以附加到已經(jīng)運行的進程或新進程。作為開發(fā)人員和系統(tǒng)管理員的診斷和調(diào)試工具,它非常有用。
它還可以作為一種工具,通過跟蹤不同的程序調(diào)用來了解系統(tǒng)。這個工具的優(yōu)點是不需要源代碼,程序也不需要重新編譯。
使用strace的基本語法是:
斯特拉思 的輸出很長,所以我們通常對顯示的每一行都不感興趣。我們可以使用#39-e expr#39選項來過濾不需要的數(shù)據(jù)。
使用#39-p pid#39選項綁定到正在運行的進程。
使用#39-o#39選項,可以將命令的輸出重定向到一個文件。
Strace只過濾系統(tǒng)調(diào)用的輸出。
ltrac:
Ltrace跟蹤并記錄進程的調(diào)用。;的動態(tài)(運行時)庫和它接收的信號。它還可以跟蹤進程發(fā)出的系統(tǒng)調(diào)用。其用法類似于strace。
#39-i#39選項在調(diào)用庫時打印指令指針。
#39-S#39選項用于實現(xiàn)系統(tǒng)調(diào)用和庫調(diào)用。
Trace捕獲#39STRCMP#39庫調(diào)用的輸出。
相關(guān)文章教程推薦:linux教程
那個 李nux中程序調(diào)試的方法有哪些細節(jié)?
linux進程調(diào)度的三種策略是什么?
進程調(diào)度策略是調(diào)度系統(tǒng)將在CPU上運行哪個進程。
這種調(diào)度分兩層考慮。
第一級,進程狀態(tài),是最高優(yōu)先級,即最高優(yōu)先級。
在linux中,只有處于就緒狀態(tài)的進程可以被調(diào)度和選擇然后占用CPU,其他狀態(tài)的進程不能占用CPU。
下面是進程在linux中的狀態(tài):TASK_RUNNING:就緒狀態(tài),當你得到CPU后就可以運行它了。
TASK _ int: ;■淺睡眠時,資源到位或收到信號就會變得準備就緒。
TASK_UNINT:進入深度睡眠,當資源到位時,他將進入就緒狀態(tài),不會響應信號。
TASK_ZOMBIE: dead狀態(tài),進程退出后。
TASK_STOPPED:暫停狀態(tài),收到SIG_CONT信號后的就緒狀態(tài)。
第二層,實際上是在操作系統(tǒng)中實現(xiàn)的,就是把所有準備好的進程鏈接成一個隊列,調(diào)度進程時只考慮這個隊列中的進程,不考慮其他進程,實現(xiàn)了第一層中的要求。
下一步是就緒隊列中的進程之間的競爭。
Linux采用三種不同的調(diào)度策略,SCHED_FIFO(以下簡稱FIFO,先來先服務),SCHED_RR(以下簡稱RR,時間片輪換)和SCHED_OTHER(以下簡稱OTHER)。
在這里,你可以看到一個問題。具有相同調(diào)度策略的進程自然具有可比性,Linux3的三種調(diào)度策略并存。那么采用不同調(diào)度策略的進程如何比較呢?可以說兩者沒有可比性。
其實調(diào)度的時候,調(diào)度只看一個指標,就是每個進程的權(quán)重,權(quán)重最大,在可執(zhí)行隊列中排名第一的,就會被調(diào)度執(zhí)行。
但是權(quán)重的計算會設(shè)計到各種因素,其中調(diào)度策略可以說是權(quán)重計算中最重的。
Linux為什么要這么做?這是由交易的多樣性決定的。有兩種進程:實時進程和非實時進程。FIFO和RR用于支持實時進程的調(diào)度。讓 s來看看FIFO和RR這三種策略下權(quán)重的計算公式,以及權(quán)重為1000的進程實際運行時間的計算公式。當時間片為0時,權(quán)重為0。當時間片不為0時,權(quán)重的剩余時間片為20-nice,同時,如果內(nèi)核線程有一個小的獎金1,這是因為內(nèi)核線程沒有 t不需要切換用戶空間,所以給它一個獎勵,獎勵他在切換過程中的低開銷。
時間電影很容易理解,很好這個值,用過linux系統(tǒng)的人都知道,是從unix繼承來的概念,表示謙遜,是20到-19的數(shù)字,可以通過nice和renice指令設(shè)置。
從代碼中也可以看出,值越小,對別人就越不謙遜。
由此我們可以看出,F(xiàn)IFO和RR至少有1000個基數(shù),所以當有FIFO和RR調(diào)度策略進程時,其他進程就沒有機會被調(diào)度了。
同時,從權(quán)重計算公式中可以看出,F(xiàn)IFO先來先服務調(diào)度策略得到滿足,但是RR,時間片輪換的調(diào)度,如果按照這個權(quán)重計算,就不能滿足時間片輪換的概念。
這里只是權(quán)重的計算,RR策略的流程在調(diào)度時有特殊處理。
以上都是重量計算。讓 讓我們來看看真正的日程安排過程。首先,它是RR策略過程的特殊處理。如果當前進程采用RR策略,就要看他的時間片是否用完。當它用完時,它將被踢到就緒隊列的末尾,他的時間片將被恢復。
然后便于整個就緒隊列找到權(quán)重最大的第一個進程運行。
總體的調(diào)度效果是,如果有帶FIFO和RR策略的進程,就先調(diào)度,兩者之間的時間長短決定勝負,而兩個策略遵守各自的調(diào)度策略。
其他只有在前兩種在就緒隊列中不存在時才能執(zhí)行。他們其實是輪流執(zhí)行的,但是他們之間的勝負取決于剩余時間和NICE值。
同時,就緒隊列中的最高優(yōu)先級被賦予相同的權(quán)重。