¿Hay alguna manera de obtener el estado del proceso secundario de un proceso basado en su PID en Ruby?Obtenga el estado del proceso por pid en Ruby
Por ejemplo, en Python que puede hacer psutil.Process (PID) .status
¿Hay alguna manera de obtener el estado del proceso secundario de un proceso basado en su PID en Ruby?Obtenga el estado del proceso por pid en Ruby
Por ejemplo, en Python que puede hacer psutil.Process (PID) .status
No sé de un método de rubí portátil para obtener el estado del proceso de un proceso en ejecución. Puede hacer Process.wait
y marcar $?.exitstatus
, pero eso no se parece a lo que quiere. Para una solución POSIX, se puede usar
`ps -o=state= -p #{pid}`.chomp
para obtener el ps código de letras produce para el estado del proceso
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.
En OS X, I fijó una cadena:
outputstring="ps -O=S -p #{mypid}"
luego ejecutar en una llamada% x:
termoutput=%x[#{outputstring}]
Puedo mostrar eso si es necesario, o simplemente mantener el resultado limpio y actuar en el estado que encontré con la llamada.
Estaba buscando lo mismo. Es una pena que ProcessStatus no parezca ser inicializado desde un pid en vivo. Esto es vital si quieres hacer algo como matar a tiempo de manera segura a un proceso hijo.
En cualquier caso, es la segunda línea en /proc/$pid/status
si estás en Linux .: status_line = File.open("/proc/#{pid}/status") {|f| f.gets; f.gets }
Lo más probable es mucho, mucho más rápido que cualquier cosa que implica un programa externo.
Solución simple y elegante para evitar depender de programas externos (y desembolsos), gracias. – Navarro
Creo que el Módulo de proceso tiene lo que necesita en él: http://www.ruby-doc.org/core-1.9.3/Process.html – vlasits
¿Qué sistema operativo (OS) necesita para que esto funcione? – Phrogz
@vlasits El módulo de proceso no tiene ningún método para obtener el estado del proceso en ejecución, solo los procesos salidos. – dbenhur