1樓:網友
第乙個例子裡,第乙個fork會出來乙個子程序(共有2個程序),第二個fork會在這兩個程序裡面都建立子程序(結果共有4個程序),輸出4次hello
第乙個例子裡,第乙個fork會出來乙個子程序(共有2個程序),第二個fork前有pid>0判斷,所以只會在主執行緒裡面都建立子程序(結果共有3個程序),輸出3次hello
2樓:歡樂多
fork()函式會有兩個返回值,在主程序會返回子程序的pid,在子程序會返回0,所以,如果判斷返回值大於0,即是在主程序。
第乙個是主程序子程序執行完全一樣的**,fork乙個子程序,所以會輸出4個hello。
第二個在第一次fork完畢後只有主程序會fork乙個子程序,所以會輸出3個hello。
如何在windows系統下用c(c++)語言實現linux(unix)下的fork函式的呼叫
3樓:傑克蕭
在window下沒有乙個函式可以實現unix下的fork()函式,其原因是歷史造成的。對於unix來說它一出生就是多使用者的系統,所以它的所有程序都共有乙個最原始的父程序init.而windows生下來時是個單使用者系統(dos),不存在這樣的概念。
所以fork這個函式是unix下特有的。
如果硬要模似,createprocess()不如用createthread()更接近實際情況,把主thread中的所有公共變數都塞入乙個結構/類的,帶入新的thread中,這樣可以大致完成"複製自身"的要求。
但由於是thread,所以主thread死後,子thread不能獨立存在,而fork()出來的子程序可以脫離主程序獨立存在,這一點在window下只有createprocess()才略有相似之處。
總之,實現類似fork()的功能在window下是複雜,必須個案處理,無法"一言以蔽之曰".
4樓:
win32api裡自己有建立執行緒用的函式,為什麼一定要仿照fork呢?這本來就是兩個不同的作業系統,思想也不一樣。隨便google一下都能找到。
c語言中怎麼用fork()建立子程序執行程式並且計算時間
5樓:網友
1、fork一般用於處理多執行緒任務。比如在網路中,需要同時傳送多種請求報文,則可以fork出子程序來進行發包任務,而父程序則直接去做自己的邏輯任務。
2、所謂執行時間指的是已經執行了多長時間還是從程序建立到程序退出的時間?輸入的程式是由程式啟動還是已經在執行的 ,如果是已經存在的,就試著去獲取程序建立時間(win32 提供這樣的api),然後獲取當前時間,就可以得到程序已經執行了多久。如果是程式啟動的,那就用類似time這種函式打樁就可以了。
6樓:網友
這是快取的問題,可參考。
c++如何並行程式設計
7樓:網友
多執行緒才可以啊,好比乙個人的大腦,計算機也不能同時工作的,即使是多執行緒,也是交替使用cpu的資源的。
8樓:網友
1、c++沒有專門的並行程式設計模式,但是可以用多執行緒,多程序來模擬並行程式設計。
2、例如在linux下,可以用fork函式來呼叫新程序。
fork函式是電腦程式設計中的分叉函式。返回值: 若成功呼叫一次則返回兩個值,子程序返回0,父程序返回子程序標記;否則,出錯返回-1。
fork函式將執行著的程式分成2個(幾乎)完全一樣的程序,每個程序都啟動乙個從**的同一位置開始執行的執行緒。這兩個程序中的執行緒繼續執行,就像是兩個使用者同時啟動了該應用程式的兩個副本。
函式原型。pid_t fork( void);
pid_t 是乙個巨集定義,其實質是int 被定義在#include中)
返回值: 若成功呼叫一次則返回兩個值,子程序返回0,父程序返回子程序id;否則,出錯返回-1
函式說明。乙個現有程序可以呼叫fork函式建立乙個新程序。由fork建立的新程序被稱為子程序(child process)。fork函式被呼叫一次但返回兩次。
兩次返回的唯一區別是子程序中返回0值而父程序中返回子程序id。
子程序是父程序的副本,它將獲得父程序資料空間、堆、棧等資源的副本。注意,子程序持有的是上述儲存空間的「副本」,這意味著父子程序間不共享這些儲存空間。
unix將複製父程序的位址空間內容給子程序,因此,子程序有了獨立的位址空間。在不同的unix (like)系統下,無法確定fork之後是子程序先執行還是父程序先執行,這依賴於系統的實現。所以在移植**的時候不應該對此作出任何的假設。
c語言中的fork()函式怎樣理解啊?不要百科的。
9樓:網友
fork一般用於處理多執行緒任務。比如在網路中,你需要同時傳送多種請求報文,則可以fork出子程序來進行發包任務,而父程序則直接去做自己的邏輯任務。
學習函式可以從功能入手,看它能夠實現那些特定的需求。網路上給的只能是教科書似的定義,要是你想收穫更多,建議看一些開源**。
fork()程式設計,建立2個子程序,實驗內容
10樓:網友
很簡單,列印父程序pid,然後建立子程序,並列印子程序pid,然後再建立乙個子程序,並列印pid。
#include
#include
#include
int main()
else if(pid1 < 0)
wait(null);
pid2 = fork();
if (pid2 == 0)
else if(pid2 < 0)
wait(null);
return 0;}
fork函式父子程序執行順序為什麼是隨機的
11樓:有你的晴天
因為fork函式是建立子程序的,該函式會返回二次,呼叫完成之後,即會存在父和子這二個程序,而這兩個程序的執行是靠作業系統來進行排程的,所以這兩個程序的執行不具備相關性了。
程式設計:用fork()建立一子程序,子程序求前10個自然數的和並列印,系統呼叫wait()讓父程序等待子程序結束。
12樓:有你的晴天
#include
#include
#include
#include
#include
using namespace std;
子程序的入口函式。
void submain()
int main()
else if (pid > 0)
return 0;}
如何使用gdb除錯多程序
follow fork mode 在版linux核心及以後,gdb對使用fork vfork建立子程序的程式提供了follow fork mode選項來支援多程序除錯。follow fork mode的用法為 set follow fork mode parent child parent fork...
現代作業系統為何都是多程序的?
對作業系統來說 多程序是多工的根本,現代作業系統肯定必須要具備這一點。多程序對cpu 以及資源的利用率都比較高,配合多核cpu效能會提公升很多,不只現代作業系統是多程序的,現在很多應用程式都是多程序的。為什麼說程序是作業系統的核心概念?這個 一來是為了讓人們更加容易的理解,二來,就是 每乙個系統在啟...
這些程序是什麼,什麼是程序?
是天網防火牆軟體,用於抵禦黑客的攻擊。是microsoft windows 2003伺服器版作業系統的一部分,用於管理員關閉你的伺服器。後門木馬病毒 用於竊密,遠端控制。聲音控制程式。是microsoft office產品套裝的一部分。它可以選擇使用者文字輸入程式,和微軟office xp語言條。這...