getrusage()可以顯示進程的子進程使用的內存量。我正在創建一個從中啓動幾個子程序的shell。 getrusage()會報告所有這些孩子正在使用的記憶的總和,這不是我想要的。我想知道每個孩子正在使用多少內存。 getrusage()看起來像我想使用的東西,除非它不適用於單個子進程。有什麼可以使用的?在C++中尋找類似getrusage()的東西
回答
也許你可以一次把一個孩子分叉一個,然後用getrusage(RUSAGE_CHILDREN...)
獨立地找出每個孩子的用法。
這種方法最明顯的缺點是如果孩子需要同時運行。在這種情況下,一個自定義的中介程序可以做到這一點。而不是直接執行兒童,執行一個程序:
- 叉
exec
S上的請求的程序,也許是作爲命令行參數(程序及其參數)傳遞的nice
或time
命令 的風格
- 父母爲子女執行
getrusage()
。由於只有一個,這是所期望的結果。然後使用一些機制將信息傳遞迴主程序,也許是一個狀態文件。
然後,所有需要的是讓主人通過指向運行目標孩子和報告內存使用情況的中介來分離其每個孩子。
問題是要重新調整子進程的層次結構,以便調用getrusage()
的程序只有一個子進程。主程序不能,因爲它有太多的孩子,並沒有系統調用來獲得pid的內存使用情況。
我想你也可以在/proc/<pid>/mem
中窺探,如果這是Linux或兼容。
我使用fork然後execv最初創建孩子。你是否說我可以再次使用叉子進入孩子們的內心? – 2011-04-30 04:30:52
@ z-buffer:類似的東西。我會在答案中澄清。 – wallyk 2011-04-30 04:32:11
這隻會在孩子第一次創建時才起作用,對嗎?我希望能夠看到孩子們在任何時候都用了多少記憶。 – 2011-04-30 04:35:04
當你每個子進程fork()
時,父進程得到PID
。您可以使用它來查詢/proc
文件系統,特別是/proc/{pid}/status
(可能還有其他文件系統,具體取決於您所使用的具體指標)。
這會給你的各種信息,包括:
VmSize: 2788 kB
VmLck: 0 kB
VmRSS: 1280 kB
VmData: 252 kB
VmStk: 16 kB
VmExe: 268 kB
VmLib: 2132 kB
您可以使用wait3
或wait4
,詳見本其他SO線程:CPU time after the process finished。
- 1. 尋找類似緩存的東西
- 2. 尋找類似於ui的東西:在JSP中重複使用
- 3. 尋找類似DatePickerDialog但具有遞歸函數的東西
- 4. 尋找類似的東西,以Path.Combine瀏覽文件夾
- 5. 接口尋找類似Appendable或OutputStream的東西
- 6. 類似dict的東西在c
- 7. 類似的東西?
- 8. 尋找(N)步驟GUI類的東西
- 9. VS2010不斷尋找東西
- 10. 在C#中列出類似於C++中的vector.reserve(n)的東西
- 11. 在C++(或C++ 11)中是否有類似於c#的東西?
- 12. 在C#中fflush()從C中有類似的東西嗎?
- 13. Python:尋找列表中的東西
- 14. 東西還在尋找的jQuery 1.3
- 15. AS3 - 類似arguments.caller的東西?
- 16. 在HTML頁面尋找「stock_value」 - preg_match東西
- 17. 東西在Java中是(類似)參數
- 18. 尋找類似HashSet的東西,但是鍵值的範圍有多大?
- 19. 尋找關於Flex模塊化範例(或類似的東西)的pdf
- 20. 在MUnit尋找像JUnit的@Before/@After之類的東西
- 21. 尋找類似於提交完整事件來關閉加載器的東西
- 22. QTableView中類似於QTableWidget :: currentCellChanged的東西?
- 23. 類似的東西在Python迴文
- 24. 我們在JavaScript中有類似C#String.Format(...)的東西嗎?
- 25. 在C++中是否有類似於typeof的東西?
- 26. 在Objective-C中是否有類似於LINQ的東西?
- 27. c#尋找類似的顏色
- 28. 我正在尋找類似於drupal CCK的東西,但在Java中(在Java CMS中)?
- 29. 尋找類似笨
- 30. 尋找類似「array_and」
你可以在每個子進程中調用getrusage(RUSAGE_SELF,..)嗎? – 2011-04-30 04:24:36