루비 스크립트에서 시작된 모든 하위 프로세스의 pid를 얻으려면 어떻게해야합니까?ruby list child pids
답변
당신은 함께 현재의 프로세스를 얻을 수 있습니다 :
Process.pid
더 자세한 내용은 http://whynotwiki.com/Ruby_/_Process_management를 참조하십시오.
그런 다음 운영 관련 명령을 사용하여 하위 pid를 가져올 수 있습니다. 유닉스 기반 시스템이 내가 ps -ef
의 출력이 다른 유닉스 맛에 약간 다릅니다 생각으로이 아마 모든 유닉스 시스템에서 작동하지 않음을 인정
# 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
의 라인을 따라 뭔가 될 것입니다.
Process.fork은 스폰 된 자식의 PID로 응답합니다. 자녀를 태어나는 동안 배열에서 계속 추적하십시오. http://ruby-doc.org/core/classes/Process.html#M003148을 참조하십시오.
좋은 변형이 될 수 있지만 제 경우에는 블록을 생성하는 방법이 있고 fork, system, spawn, backtrick 및 pid 카운터를 통해 해당 메서드를 연결하는 모든 호출을 추적하는 유일한 방법이 있습니다. children pids를 얻는 더 쉬운 방법이있다. – tig
도 sys-proctable
보석을 사용하여 수행 할 수 있습니다 :이 실제로 조용 복잡하고 특정 플랫폼이다
require 'sys/proctable'
Sys::ProcTable.ps.select{ |pe| pe.ppid == $$ }
. 실제로 은이 의도적으로 숨기려고하면 모든 하위 프로세스를 찾을 수 없습니다.
스폰 된 프로세스를 그냥 죽이고 싶다면 많은 옵션이 있습니다. 테스트 프레임 워크의 경우 다음 두 가지를 선택했습니다. 1. pgid => true
으로 프로세스를 생성합니다. 2. 변수 MY_CUSTOM_COOKIE=asjdkahf
을 삽입하고 해당 쿠키가있는 환경에서 procs를 찾아서 종료합니다.
FYI는 ps
을 사용하여 프로세스 계층 구조를 확인하는 것은 매우 신뢰할 수 없습니다. 사슬에서 하나의 프로세스가 종료되면 서브 프로세스는 최소한 1
의 부모 PID를 갖습니다 (리눅스에서는 적어도). 따라서 구현할 가치가 없습니다.
- 1. gem list pdfkit for excel ruby
- 2. pseudo-class : last-child weirdness
- 3. gdbserver follow child
- 4. jQuery : nth-child() selector
- 5. CSS Child Selector
- 6. Modeless Child Dialog
- 7. Javascript replace child?
- 8. Javascript find child class
- 9. jQuery nth child trouble
- 10. "child"테이블에서 ForeignKey 편집하기
- 11. Jquery Nth-child 질문
- 12. WordPress Child Theme
- 13. Rails transparent child relationship
- 14. CSS first-child
- 15. Xstream : with child element
- 16. 다른 창에서 List List 항목보기
- 17. erlang의 이벤트 관리자 프로세스입니다. 명명 된 프로세스 또는 Pids?
- 18. parent> child CSS selector
- 19. 사용 : 클래스 선택기가있는 last-child
- 20. unix-fork-monitor-child-progress
- 21. pseudoclass : first-child not working
- 22. Child Window의 스크린 샷 얻기
- 23. GridView FocusedRowChanged - Child Class 객체
- 24. Sass and combined child selector
- 25. jquery nth-child 선택기 문제
- 26. jQuery에서 first-child 및 : last-child 선택기를 사용할 때 클래스를 제외하는 방법
- 27. PyQt Child 위젯이 paintEvent를 수신하지 않습니다
- 28. jquery masonry : nth-child()가 작동하지 않습니까?
- 29. WPF에서 어떻게 DataTemplates/child datatemplate에 링크를 작성합니까?
- 30. jquery-child 아이디를 감지하는 방법은 무엇입니까?
'Process.pid'는 부모 프로세스가 아닌 현재 프로세스의 PID를 반환한다. 부모 프로세스 pid를 얻으려면,'Process.ppid'를 실행하십시오. – henrikhodne
현재 프로세스가 필요한 주석에 오류가 있습니다. 자식 프로세스의 부모가됩니다. – Jamie
몇 센트 : "ps o pid = --ppid # {pid}"는 "ps -ef | grep # {pid}"보다 편리 할 수 있으므로이 경우 불필요한 행과 필드를 걸러 낼 필요가 없습니다 . – timurb