有没有办法根据Ruby中的PID来获取进程的子进程状态?
例如,在Python中,您可以执行psutil.Process(pid).status
答案 0 :(得分:2)
我不知道一个可移植的ruby方法来获取正在运行的进程的进程状态。您可以执行Process.wait
并检查$?.exitstatus
,但这看起来不像您想要的那样。对于posix解决方案,您可以使用
`ps -o=state= -p #{pid}`.chomp
获取进程状态的字母代码ps
PROCESS STATE CODES
Here are the different values that the s, stat and state output specifiers
(header "STAT" or "S") will display to describe the state of a process.
D Uninterruptible sleep (usually IO)
R Running or runnable (on run queue)
S Interruptible sleep (waiting for an event to complete)
T Stopped, either by a job control signal or because it is being traced.
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z Defunct ("zombie") process, terminated but not reaped by its parent.
答案 1 :(得分:2)
我一直在找同样的事情。很遗憾,ProcessStatus似乎无法从实时pid初始化。如果你想做一些安全的定时杀死子进程的事情,这是至关重要的事情。
无论如何,
它是/proc/$pid/status
中的第二行,如果你在Linux上:
status_line = File.open("/proc/#{pid}/status") {|f| f.gets; f.gets }
最有可能比涉及外部程序的任何事情都快得多。
答案 2 :(得分:0)
在OS X上,我设置了一个字符串:
outputstring="ps -O=S -p #{mypid}"
然后在%x调用中执行它:
termoutput=%x[#{outputstring}]
如果需要,我可以显示它,或者只是保持输出清洁并对我通过调用找到的状态起作用。