日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Linux下创建进程简介

發布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux下创建进程简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在博文https://blog.csdn.net/fengbingchun/article/details/108940548中簡單介紹了Windows下通過函數CreateProcess創建進程的過程,這里簡單介紹下Linux下通過fork函數創建進程的過程。很早之前在https://blog.csdn.net/fengbingchun/article/details/45690745中也曾介紹過。

進程創建的UNIX模型為分叉----執行(fork----exec)模型。fork函數調用生成一個完全復制父進程內存的子進程。exec函數調用以一個新的可執行文件替換當前進程。這兩個調用通常一起使用,這樣應用程序可調用fork函數創建一個新進程,然后該子進程直接調用exec函數以一個新的可執行文件替換自身。如果fork調用后面不跟exec調用,我們將有同一進程的兩個副本。到進行分叉調用時這兩個進程的進程狀態是一樣的。

子進程和父進程都會從fork函數調用返回,唯一的區別在于調用的返回值。子進程將返回零值,父進程將返回子進程的進程ID。fork函數不帶任何參數,并返回一個整數值,返回負值,表示創建子進程失敗。子進程和父進程在單獨的內存空間中運行。子進程具有自己唯一的進程ID。子進程不會繼承其父進程的內存鎖。調用一次fork,卻能夠返回兩次返回值,在子進程中,fork函數返回0,在父進程中,fork函數返回新創建子進程的進程ID。我們可以通過fork返回值來判斷當前進程是子進程還是父進程。兩個進程執行沒有固定的先后順序,哪個進程先執行要看系統的進程調動策略。一個進程通過調用wait來與它的子進程同步。

以下是測試代碼段:

void test_fork_1()
{// reference: https://www.geeksforgeeks.org/fork-system-call/fork();fork();fork();// "hello"的打印次數等于創建的進程數,進程總數為2^n,其中n是fork調用的數目fprintf(stdout, "hello\n"); // 注:總共會輸出8次hello
}

test_fork_1():總共會輸出8次”hello”。”hello”的打印次數等于創建的進程數,進程總數為2^n,其中n是fork調用的數目。8次”hello”=1個主進程+7個子進程。執行結果如下圖所示:

void test_fork_2()
{// reference: https://www.geeksforgeeks.org/fork-system-call/pid_t f = fork();// child process because return value zeroif (f == 0) {fprintf(stdout, "hello from child: parent pid: %d, my(child) pid: %d\n", getppid(), getpid());}// parent process because return value non-zeroelse if (f > 0) {fprintf(stdout,	"hello from parent: my(parent) pid: %d\n", getpid());} else {fprintf(stderr, "unable to create child process\n");}
}

test_fork_2():”hello from child”和”hello from parent”兩個輸出是可能的,因為父進程和子進程同時運行。因此,我們不知道操作系統是先將控制權交給父進程還是子進程。父進程和子進程正在運行同一程序,但這并不意味著它們是相同的。操作系統為這兩個進程分配不同的數據和狀態,并且這些進程的控制流可以不同。執行結果如下圖所示:

GitHub:https://github.com/fengbingchun/Messy_Test

總結

以上是生活随笔為你收集整理的Linux下创建进程简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。