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