【发布时间】:2011-08-26 16:17:20
【问题描述】:
我有一个 python 脚本,它使用带有 os.kill 的 SIGSTOP 和 .SIGCONT 命令来暂停或恢复进程。有没有办法判断相关PID是处于暂停还是恢复状态?
【问题讨论】:
标签: python linux process controls pid
我有一个 python 脚本,它使用带有 os.kill 的 SIGSTOP 和 .SIGCONT 命令来暂停或恢复进程。有没有办法判断相关PID是处于暂停还是恢复状态?
【问题讨论】:
标签: python linux process controls pid
您可以从 /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'
【讨论】:
调用 ps 并检查 STAT 值。 D 不间断睡眠(通常是 IO) R 正在运行或可运行(在运行队列上) S 可中断睡眠(等待事件完成) T 由于作业控制信号或正在跟踪而停止。 W 分页(自 2.6.xx 内核起无效) X 死了(永远不应该被看到) Z 已失效(“僵尸”)进程,已终止但未被其父进程收割。
【讨论】:
你可以使用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'
>>>
【讨论】: