簡體   English   中英

子進程,fork和exec的內存使用情況

[英]Memory usage by a child process, fork and exec

調用fork和exec后,如何測量子進程使用的內存? 基本上我希望能夠編寫與以下內容相對應的代碼

if (!fork()) {

    // run child process
    exec();
} else {

    while (child active) {
        print memory used by child
    }
}

我在這里不知道兩件事,如何查看子進程是否已完成運行? 我是否需要在這里使用某種過程級互斥? 如果是,那么我可以使用什么結構? 我可以僅將OS文件系統用於此目的嗎?

我也在這個鏈接上尋找答案, 在fork和exec之間的區別 ,在第8段中,作者說,當進程調用fork而沒有調用exec時,寫時復制非常有用。 但是,在父級調用fork而不調用exec的情況下,這不是真的嗎? 當父級調用exec時,子級的虛擬地址空間將被清除,並替換為新程序加載到內存后生成的虛擬地址空間正確嗎?

謝謝!

關於以上評論鏈,我顯然無法回復,因為我沒有50個代表:

如果成功,則父級中fork的返回值是子級的PID。 您可能應該保存返回值,以便可以
1.等待正確的孩子(如果您有多個孩子),並且
2.查看fork是否失敗(在這種情況下,您可能不想在孩子退出之前循環播放)。

您也可以使用信號來判斷孩子何時死亡,而不是連續嘗試使用WNOHANG選項等待。 該進程將在終止(或停止)時將SIGCHLD發送給父進程,如果該進程死亡,則可以使用waitpid等待它並停止循環。 看到:
男子7信號
男人2 sigaction
有關更多信息。

關於內存使用情況,您似乎想要/ proc / [pid] / statm或/ proc / [pid] / stat。

man 5 proc將為您提供有關這些文件中內容的所有信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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