[英]Returning a value from the child process to its parent in C created with fork()
了解有關使用C進行分叉的信息。
我可以使用fork()
生成一個子進程。 假設它執行一些計算。 計算完成后,我希望它死掉並將結果(某些int
)返回給父級。 如何才能做到這一點?
通常,我會發布自己的進度代碼,但實際上是這樣:
int main () {
pid_t pid = fork();
if (pid == 0) {
// I'm a child!
int calculation = 10 + 10;
// <----- Return 20 to the parent?
}else{
// I am the parent, and I am waiting to receive a 20
}
exit(0);
}
您無法執行此操作,因為exit
僅提供退出代碼(通常,成功則應為EXIT_SUCCESS
,並且只有7位)。 退出代碼是進程返回的唯一內容(請參閱waitpid(2) ,應始終調用該代碼以避免僵屍進程 )。
您可以讓父進程和子進程使用一些共享的內存和信號量(請參見shm_overview(7)和sem_overview(7) ),但這很復雜,因此不適合您的情況。
最簡單(可能也是最快)的方法是使用pipe(7) -s( 在 fork
之前設置),並使子進程在其stdout上打印到管道,並在管道上讀取父進程。 參見pipe(2)和popen(3) 。
您可能想要並行fork
多個 (最多在桌面上為十二個)進程。 然后,您需要多路復用其管道輸入。 為此,要有一些事件循環,並在父進程中使用poll(2)進行多路復用。
另請閱讀高級Linux編程
除了管道和分支之外,最簡單的方法是使用popen()並將stdout上的childs響應讀取為FILE流。
您根本不必處理fork。 (盡管確實,popen是在fork和pipe和dup2之上實現的)。
pclose()可用於檢查child的退出狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.