2011-05-16 6 views

risposta

4

È possibile trovare informazioni su un processo dalla sua directory/proc (/proc/<PID>). In particolare, è possibile trovare il suo stato eseguito con questa espressione python:

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

EDIT: Questa espressione successiva corregge un bug (presumibilmente raro) con l'originale:

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

Non usando os.path.join! ... aspetta, questa è pura domanda di linux. – janislaw

+0

@janislaw - grazie. –

4

chiamare ps e controllare il valore STAT. D continuità del sonno (di solito IO) R in esecuzione o eseguibile (in coda di esecuzione) S sonno Interrompibile (in attesa di un evento per il completamento) T Arrestato, sia da un segnale di controllo di lavoro o perché è tracciata. W paging (non valido dal kernel 2.6.xx) X dead (non dovrebbe mai essere visto) Z Defunct ("zombie") processo, terminato ma non raccolto dal suo genitore.

+0

Grazie, ho usato ps axo fname, stat, pid e ha funzionato esattamente come hai detto tu, non sapevo che il valore STAT fosse per quello. – CobraBytez

2

È possibile utilizzare psuti l:

>>> 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' 
>>>