unix程序建立使用 第一講

2021-10-09 11:47:49 字數 2094 閱讀 5162

o:就緒態,一切準備工作都已經做好,等待被呼叫。

r:執行態,linux下沒有就緒態,o也就是r。

s:可喚醒的睡眠態,系統呼叫、獲取到資源、收到資訊都可以被喚醒。

d:不可喚醒的睡眠態,必須等到的事件發生。

t:暫停態,收到了sigstop訊號,當收到sigcont訊號則繼續執行。

x:死亡態。

z:殭屍態。

<:高優先順序。

n:低優先順序。

l:多執行緒程序。

s:有子程序的程序。

+:後台程序組。

ps -aux

user pid %cpu %mem vsz rss tty stat start time command

root 1 0.0 0.2 126212 4296 ? ss sep14 0:19 /usr/lib/systemd/systemd --switched

root 2 0.0 0.0 0 0 ? s sep14 0:00 [kthreadd]

可以通過ps的命令來看到程序的狀態:stat

乙個程序可以擁有多種狀態。

pid_t fork(void);

功能:建立子程序

1、失敗返回-1,如果成功會返回兩次。

2、父程序會返回子程序的id,子程序返回0

3、根據返回值的不同,分別為子程序和父程序設計不同的分支。

4、通過fork建立出的子程序,就是父程序的副本,它會把父程序的堆、棧、全域性段、靜態資料段、io流的緩衝區都拷貝乙份,父子程序共享**段。

5、fork函式呼叫成功後,父子程序就開始各自執行了,它們的先後順序是不確定的,但可以通過某些實現來保證。

#include

#include

intmain()

if(fork()

)if(fork()

)printf

("程序id:%d 父程序id:%d\n"

,getpid()

,getppid()

);while(1

);}

輸出結果:
程序id:

26146 父程序id:

4594

程序id:

26147 父程序id:

26146

程序id:

26148 父程序id:

26147

程序id:

26149 父程序id:

26148

6、當總程序數超過系統的限制時,就無法再建立程序的了,此時fork函式會返回-1,執行失敗。

7、孤兒程序:子程序還有執行,但父程序已經結束,此時子程序會被init(1)收養,子程序變成孤兒程序。

#include

#include

intmain()

sleep(1

);return

;}

輸出結果:
子程序:

28010 父程序28009

子程序:

28010 父程序1

// 此時父程序已消亡 子程序被init(1)收養 成為孤兒程序

8、殭屍程序:子程序已經死亡,但父程序沒有及時**子程序,此時子程序就會變成殭屍程序。

#include

#include

#include

intmain()

while(1

);}

輸出結果:

子程序:29928

通過ps命令檢視子程序:29928狀態:已經是z表示殭屍程序。

29928  0.0  0.0      0     0 pts/0    z+   19:45   0:00 [a.out]

9、父程序開啟的檔案和子程序是共享的。

第一講 遞迴

遞迴 recursion 程式呼叫自身的程式設計技巧。遞迴滿足2個條件 1 有反覆執行的過程 呼叫自身 2 有跳出反覆執行過程的條件 遞迴出口 一 階乘 include using namespace std int recursive int i int main main 三 斐波那契數 inc...

矩陣第一講

特殊矩陣1.零矩陣 所有矩陣的所有元素全都為0 2.對角矩陣 乙個n階方陣除對角線上的所有元素都為0 2.數量矩陣 對角矩陣中對角線上元素為常數,3.單位矩陣 數量矩陣中對角線上上常數為1.4.行階梯矩陣 乙個矩陣的每個非零行 元素不全為零 的非零首元 第乙個非零元素 所在列的下標隨著行標的增大,並...

第一講 遞迴

遞迴 recursion 程式呼叫自身的程式設計技巧。遞迴滿足2個條件 1 有重複執行的過程 呼叫自身 2 有跳出重複執行過程的條件 遞迴出口 一 階乘 include using namespace std int recursive int i int main main 三 斐波那契數 inc...