假設func函數有錯誤,以至於它泄漏內存。關於在子進程中發生內存泄漏的問題
pid_t childPid;
int status;
childPid = fork();
if (childPid == -1)
errExit("fork");
if (childPid == 0) /* Child calls func() and */
exit(func(arg)); /* uses return value as exit status */
/* Parent waits for child to terminate. It can determine the
result of func() by inspecting 'status'. */
if (wait(&status) == -1)
errExit("wait");
問題1> 如果一個程序到底泄漏內存,程序退出後,它仍泄漏內存或系統將收集由程序分配的所有內存並沒有更多的泄漏內存?
問題2> 父進程調用等待後,子進程中的func是如何引起泄漏的內存?
當前子進程死亡時,任何由當前子進程產生的新子進程都不會被獲得,但是他們的父進程會從現在已死的子進程切換到init進程,然後調用'等待()'爲其所有的孩子。因此,在某些時候,那些產生的子進程在他們調用'exit()'...時,如果不是由它們的父節點,然後由'init'調用,將會被適當地清除。這就是說,雖然他們正在運行,即使父母是'init',他們仍然會繼續消耗資源,所以我同意這是一種「泄漏」的替代類型。 – Jason