進程由UNIX系統首先實現,在此之前,多道程序只能通過批處理的方式來執行。進程概念提出之后,操作系統從此就煥然一新。
linux中進程的概念和UNIX中完全一致。
進程是什么?我們可以簡單地用一句話定義:
進程是程序的執行。
對于這個定義,懂的人認為定義得非常準確,不懂的人卻更加糊涂了。
理解進程,最好的方式,就是編寫程序,創建一個進程。
Linux/Unix下創建進程的方法是調用fork()函數。
單詞fork的含義是分叉,父進程調用fork(),當fork()函數返回時,程序流程產生了分叉,子進程就生成了。
fork調用的邏輯是這樣的:
pid_t thePid;
thePid = fork();
if (thePid < 0)
{
//生成進程失敗
return;
}
if (thePid == 0)
{
//子進程邏輯
}
else
{
//父進程邏輯
}
實際上,我們編寫代碼時,只能根據fork()的返回值來判斷我們現在執行的是父進程的邏輯,還是子進程的邏輯:
1、對于父進程,fork()返回子進程的ID;
2、對于子進程,fork()返回0。
下面是我編寫的一個程序:
getpid的功能是獲得當前進程的ID
這是程序某次運行的情況:
可以發現:
(1)調用fork之前,進程的ID是13088;
(2)調用fork之后,父進程的ID仍然是13088,子進程的ID是13093;
(3)父進程和子進程在睡眠后再次運行,由操作系統調度,沒有固定的次序。
謝謝您的閱讀!