如何獲得從ruby腳本啓動的所有子進程的pid?ruby list child pids
回答
你可以得到當前的進程:
Process.pid
看到http://whynotwiki.com/Ruby_/_Process_management進一步的細節。
然後,您可以使用操作特定命令來獲取子pid。在基於Unix的系統,這將是沿着
# Creating 3 child processes.
IO.popen('uname')
IO.popen('uname')
IO.popen('uname')
# Grabbing the pid.
pid = Process.pid
# Get the child pids.
pipe = IO.popen("ps -ef | grep #{pid}")
child_pids = pipe.readlines.map do |line|
parts = line.split(/\s+/)
parts[2] if parts[3] == pid.to_s and parts[2] != pipe.pid.to_s
end.compact
# Show the child processes.
puts child_pids
我承認這可能不會在所有的UNIX系統的工作,我相信ps -ef
輸出在不同的UNIX版本稍有不同線的東西。
Process.fork以產生的孩子的PID作出響應。當你產卵的時候,只需要跟蹤它們。請參閱http://ruby-doc.org/core/classes/Process.html#M003148。
這將是一個很好的變體,但在我的情況下,我有一個方法產生一個塊和唯一的方法來跟蹤所有調用fork,system,spawn,backtrick和其他人通過pid counter鏈接這些方法,但我希望有更簡單的方法來獲得兒童pid – tig 2009-12-22 16:45:47
可以用sys-proctable
寶石來也做:
require 'sys/proctable'
Sys::ProcTable.ps.select{ |pe| pe.ppid == $$ }
這實際上是安靜的複雜,是特定的平臺。你實際上不能找到所有的子流程,如果他們故意試圖隱藏。
如果你想殺死衍生的進程有很多選項。對於一個測試框架,我選擇了兩個: 1.產生與pgid => true
進程的進程2.插入變量MY_CUSTOM_COOKIE=asjdkahf
,然後在環境中找到具有該cookie的過程並殺死它。
僅供參考使用ps
找出過程層次結構是非常不可靠的。如果鏈中的一個進程退出,那麼其子進程將獲得一個父進程pid 1
(至少在Linux上)。所以這不值得實施。
- 1. 創建一個UNIX Shell,對fork和child pids感到困惑?
- 2. if else smarty .tpl for nnth-child list/div
- 3. nodejs spawn child process ruby prawn pdf
- 4. 將Rails /tmp/pids/server.pid文件重定位到system/tmp/pids/
- 5. Ruby on rails list to columns
- 6. 是否可以從「list-child」訪問「列表所有者」?
- 7. Scala XML:Descendant vs Child
- 8. Jquery colone child count issue(nnth-child)
- 9. NSFetchedResultsController/Parent-Child
- 10. 用於生成excel ruby的gem list pdfkit
- 11. Typescript Parent/Child
- 12. 如何調用List <Child>的方法,但方法的參數是List <Parent>?
- 13. 「Parent c = new Child()」和「Child c = new Child()」之間有什麼區別?
- 14. 如何將數據嵌套到child> child> child組件?
- 15. CSS3 NOT FIRST-CHILD
- 16. 捆綁stderr:ArgumentError:「... tmp/pids/unicorn.pid」不可寫。如何解決它?
- 17. Jquery Last-Child或Nth-Child if ==「SALE」
- 18. ViewPager child片段空
- 19. 父模型的驗證值Child,Ruby on Rails
- 20. Neo4j - Parent - Child heirarchy + Spring
- 21. Databound Child Master Dropdownlist
- 22. Add child + hittest?
- 23. React not rendering child
- 24. Cascading Parent-Child
- 25. multiple:n-child語句
- 26. ViewPager with expandable child
- 27. css inherit child propeties
- 28. React render child from
- 29. jquery select child elements
- 30. winform datagridviewtextboxcolumn datapropertyname child
'Process.pid'返回當前進程的pid,而不是父進程。要獲得父進程pid,請執行'Process.ppid'。 – henrikhodne 2009-12-19 16:42:16
只是在註釋中出現錯誤,我們需要當前進程,因爲這將是子進程的父進程。 – Jamie 2009-12-19 16:52:47
只需幾美分:「ps o pid = --ppid#{pid}」可能比「ps -ef | grep#{pid}」更方便,在這種情況下您不必過濾掉不需要的行和字段。 – timurb 2012-02-15 15:13:22