2011-05-16 4 views
7

У меня есть скрипт python, который использует команды SIGSTOP и .SIGCONT с os.kill для приостановки или возобновления процесса. Есть ли способ определить, находится ли связанный PID в приостановленном или возобновленном состоянии?Есть ли способ определить, приостановлен ли PID Linux или нет?

ответ

4

Вы можете найти информацию о процессе из каталога/proc (/proc/<PID>). В частности, вы можете найти его запустить состояние с этим питона выражением:

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

EDIT: Это следующее выражение исправляет (предположительно редко) ошибка с оригиналом:

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

Не использовать os.path.join! ... подождите, это вопрос с чистым Linux. – janislaw

+0

@janislaw - спасибо. –

4

вызов ps и проверка значения STAT. D Бесперебойный сон (обычно IO) R Запуск или запуск (при запуске) S Прерывающий сон (ожидание завершения события) T Остановлен либо сигналом управления работой, либо потому, что он прослеживается. W пейджинг (недействителен с ядром 2.6.xx) X мертвый (никогда не должен быть замечен) Z Неисправный процесс («зомби»), завершенный, но не полученный его родителем.

+0

Спасибо, я использовал ps axo fname, stat, pid, и это сработало так же, как вы сказали, я не знал, что значение STAT для этого было. – CobraBytez

2

Вы можете использовать psuti л:

>>> 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' 
>>> 
Смежные вопросы