有没有一种方法可以在Ruby中根据进程ID获取其子进程的状态?
例如,在Python中可以执行psutil.Process(pid).status
例如,在Python中可以执行psutil.Process(pid).status
我不知道是否有一种可移植的 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.
-o=state=
不应该改成 -o state
吗?在我的 Linux 系统上用等号做法不起作用。 - user1142217我也在寻找同样的东西,可惜ProcessStatus似乎无法从一个实时pid进行初始化。如果你想要执行类似于安全定时杀掉子进程之类的操作,这是非常重要的。
无论如何,如果你使用的是Linux系统,可以在/proc/$pid/status
文件中的第二行找到它:
status_line = File.open("/proc/#{pid}/status") {|f| f.gets; f.gets }
很可能比涉及外部程序的任何方法都要快得多。
outputstring="ps -O=S -p #{mypid}"
然后在%x调用中执行它:
termoutput=%x[#{outputstring}]
如果需要,我可以显示它,或者只保持输出干净,并根据调用发现的状态进行操作。