簡體   English   中英

在使用fork()創建的C語言中,將子進程的值返回給其父進程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM