Есть ли способ определить, приостановлен ли PID Linux или нет? - PullRequest
7 голосов
/ 16 мая 2011

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

Ответы [ 3 ]

4 голосов
/ 16 мая 2011

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

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

РЕДАКТИРОВАТЬ: Это следующее выражение исправляет (предположительно редко) ошибку с оригиналом:

re.sub(r'\(.*\)', '()', open(os.path.join('/proc', str(pid), 'stat')).readline()).split()[2]=='T'
4 голосов
/ 16 мая 2011

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

2 голосов
/ 04 августа 2011

Вы можете использовать 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'
>>>
...