程序的建立和程序狀態

2021-09-01 23:36:25 字數 1904 閱讀 8377

程序:程序是乙個程式在記憶體中執行的過程。程序由程式**資料和程序控制塊(簡稱pcb)組成

**程序控制塊(pcb)**linux中的pcb是乙個名叫task_struct 的結構體,其中有一下幾個內容:

識別符號:用來區別於其他的程序的識別符號。

狀態:任務狀態,退出**,退出訊號等。

優先順序:程序的優先順序。

程式計數器:指令序列中下一條指令的位址。

記憶體指標:程式**和其它和程序相關的指標。

上下文資料:程序執行時處理器暫存器中的資料。

其它資訊。

linux中檢視程序的指令ps -ef

查詢指定的程序ps -ef | grep 【程序名】

程序的建立

fork()函式的實質是乙個系統呼叫,其作用是建立乙個新的程序,當乙個程序呼叫它,完成後就出現兩個幾乎一模一樣的程序(當然也可以不一樣,根據初始引數或變數決定),其中由fork()建立的新程序被稱為子程序,而原來的程序稱為父程序.子程序是父程序的乙個拷貝,即子程序從父程序得到了資料段和堆疊的拷貝,這些需要分配新的記憶體;而對於唯讀的**段,通常使用共享記憶體方式進行訪問。

fork()函式的返回值:

父程序返回子程序的id,

子程序返回0

錯誤返回乙個負值

這樣我們就可以根據返回值的不同來確定父子程序,

那麼是什麼原因導致錯誤?

1)當前的程序數已經達到了系統規定的上限,這時errno的值被設定為eagain。

2)系統記憶體不足,這時errno的值被設定為enomem。

fork()的簡單應用

#include #include int main ()   

else

printf("統計結果是: %d/n",count);

return 0;

}

執行結果為

i am the child process, my process id is 5574

統計結果是: 1

i am the parent process, my process id is 5573

統計結果是: 1

## 程序狀態

r執行狀態:當程序正在被cpu執行,或已經準備就緒隨時(進入執行佇列裡)可由排程程式執行,則稱該程序為處於執行狀態 。

s睡眠狀態(可中斷睡眠狀態):就是程序在等待事件的完成,當系統產生乙個中斷或釋放了程序正在等待的資源是會被喚醒。進入執行狀態。

d磁碟休眠狀態(不可中斷睡眠狀態):除了不會因為收到訊號而被喚醒,該狀態與可中斷睡眠狀態類似。但處於該狀態 的程序只有被使用wake_up()函式明確喚醒時才能轉換到可執行的就緒狀態。該狀態通常在程序需要不受干擾地等待或者所等待事件會很快發生時使用。

t停止狀態:當程序收到訊號sigstop、sigtstp、sigttin或sigttou時就會進入暫停狀 態。可向其傳送sigcont訊號讓程序轉換到可執行狀態。程序在除錯期間接收到任何訊號均會進入該狀態。

x死亡狀態:僅僅是乙個返回狀態。

檢視程序的基本指令

ps[引數]

2.命令功能:

用來顯示當前程序的狀態

3.命令引數:

a 顯示所有程序

-a 顯示同一終端下的所有程式

-a 顯示所有程序

c 顯示程序的真實名稱

-n 反向選擇

-e 等於「-a」

e 顯示環境變數

f 顯示程式間的關係

-h 顯示樹狀結構

r 顯示當前終端的程序

t 顯示當前終端的所有程式

u 指定使用者的所有程序

-au 顯示較詳細的資訊

-aux 顯示所有包含其他使用者的行程

程序以及狀態 程序的建立

程式 例如 py這是程式,是乙個靜態的 程序 乙個程式執行起來後,用到的資源 稱之為程序,它是作業系統分配資源的基本單元。不僅可以通過執行緒完成多工,程序也是可以的 乙個程式可以對應多個程序,如qq乙個程式,可以開啟多個qq則是多個程序。程序是擁有資源,如網路 記憶體等 工作中,任務數往往大於cpu...

程序建立和執行

簡單的說,每個應用在執行時就會產生乙個程序,這個程序就對這個應用負責,掌握這個應用的執行狀態。可是為什麼還要用乙個程序來控制乙個應用呢,下面將會簡單的解釋一下。現在的應用對於資源的要求都是獅子大開口,開口就是幾個g,一台電腦的記憶體一般也就幾個g,總不能一台電腦就跑這乙個應用吧。為了解決這個問題,作...

Linux程序建立和結束

在linux 中,程序的建立由系統呼叫fork 和vfork 完成。它們生成乙個子程序並且子程序是父程序的乙個複製品。fork 系統呼叫對應的kernel 函式是sys fork 此函式簡單的呼叫kernel 函式do fork 乙個簡化版的do fork 執行如下 1 alloc pid 給新的程...