有没有办法确定Linux PID是否暂停?

时间:2011-05-16 18:35:14

标签: python linux process controls pid

我有一个python脚本,它使用带有os.kill的SIGSTOP和.SIGCONT命令来暂停或恢复进程。有没有办法确定相关的PID是处于暂停还是恢复状态?

3 个答案:

答案 0 :(得分:4)

调用ps并检查STAT值。 D不间断睡眠(通常为IO) R正在运行或可运行(在运行队列中) S可中断睡眠(等待事件完成) T通过作业控制信号停止或因为它被跟踪而停止。 W分页(自2.6.xx内核以来无效) X死了(绝不应该看到) Z Defunct(“zombie”)进程终止但未被其父级收回。

答案 1 :(得分:4)

您可以从/ 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'

答案 2 :(得分:2)

您可以使用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'
>>>