¿Hay alguna forma de determinar si un PID de Linux está en pausa o no?

Tengo un script de Python que usa los comandos SIGSTOP y .SIGCONT con os.kill para pausar o reanudar un proceso. ¿Hay alguna forma de determinar si el PID relacionado está en el estado de pausa o reanudado?

preguntado el 16 de mayo de 11 a las 18:05

3 Respuestas

Puede encontrar información sobre un proceso en su directorio / proc (/proc/<PID>). Específicamente, puede encontrar su estado de ejecución con esta expresión de Python:

open(os.path.join('/proc', str(pid), 'stat')).readline().split()[2]=='T'

EDITAR: Esta siguiente expresión corrige un error (presumiblemente raro) con el original:

re.sub(r'\(.*\)', '()', open(os.path.join('/proc', str(pid), 'stat')).readline()).split()[2]=='T'

Respondido 04 ago 11, 19:08

¡No estoy usando os.path.join! ... Espera, esta es una pregunta pura de Linux. - Janislaw

llame a ps y compruebe el valor STAT. D Suspensión ininterrumpida (generalmente IO) R En ejecución o ejecutable (en cola de ejecución) S Suspensión interrumpible (esperando a que se complete un evento) T Detenido, ya sea por una señal de control de trabajo o porque se está rastreando. W paging (no válido desde el kernel 2.6.xx) X muerto (nunca debería verse) Z Proceso difunto ("zombie"), terminado pero no cosechado por su padre.

contestado el 16 de mayo de 11 a las 22:05

Gracias, usé ps axo fname, stat, pid y funcionó como dijiste, no sabía que el valor STAT era para eso. - CobraBytez

Puedes usar psutil:

>>> import psutil
>>> pid = 1243
>>> p = psutil.Process(pid)
>>> p.status
0
>>> str(p.status)
'running'
>>> p.status == psutil.STATUS_RUNNING
True
>>>
>>> p.suspend()
>>> p.status
3
>>> str(p.status)
'stopped'
>>> p.status == psutil.STATUS_STOPPED
True
>>>
>>> p.resume()
>>> str(p.status)
'running'
>>>

Respondido 04 ago 11, 15:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.