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...