![](/img/trans.png)
[英]Returning a value from the child process to its parent in C created with fork()
[英]Diposing a child process created with fork() in C
我的C作業程序將兩個矩陣相乘。 產品矩陣的每個條目都由使用fork()
創建的子進程來計算。 子進程對此進行計算,然后使用管道將數據發送給父進程。 因此,如果產品矩陣的大小為10x10,我將創建100個子流程。 工作正常。
然后我注意到對於很大的矩陣,這是行不通的。 經過檢查后,我意識到這是因為在一定數目后( pid
返回負),它將不再創建任何子進程。 例如,某種限制,這是有道理的。
確實,我不能指望我的計算機允許一個程序產生數千個子進程,因此很明顯,我的程序無法將超大型矩陣相乘。 好的。
然后發生在我身上:好吧,我不需要立即執行所有子進程。 我可以制造100個,讓他們做自己的事情,然后創建下一個100個,依此類推,直到對矩陣產品進行所有必要的計算。
我的程序本質上是一個循環,迭代rows * columns
時間。 每次迭代,它都會生成一個子進程。 因此,我決定每進行100次迭代,我就會放置一個sleep()
東西。 我的希望是,當完成sleep()
操作后,之前的100個子進程將消失,從而“釋放”了下100個批處理所需的所有空間。 las,這沒有什么區別:程序的行為完全相同(當然,除了速度較慢之外)。
因此,鑒於sleep()
事情不起作用,我懷疑我沒有適當地“殺死”孩子的過程。 這是子進程死亡的方式:
// Close the pipe!
close(fd[0]);
close(fd[1]);
// Exit
exit(0);
父級在讀取數據后也關閉管道:
read(fd[0], buffer, sizeof(buffer));
close(fd[0]);
close(fd[1]);
所以我的問題是:由於我已經創建了太多子進程而無法創建新的子進程,因此我似乎沒有適當地處置舊進程。 如何正確處置它們?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.