【问题标题】:Python script to monitor process and sub-processes用于监控进程和子进程的 Python 脚本
【发布时间】:2015-08-27 03:08:12
【问题描述】:

我有一个 Python 脚本,用于监视进程及其子进程的 CPU 和内存利用率。

脚本不断检查进程或其子进程之一是否为Active。一旦进程及其所有子进程都处于Inactive 状态,Python 脚本就会退出。

所以,我在这里针对特定流程面临的问题是 -

  1. 进程开始
  2. 进程创建子进程 1
  3. 进程创建子进程 2
  4. 进程创建子进程 3(Active 最迟时刻)
  5. 终止 sub-process-3 (此时该进程及其所有子进程均为Inactive
  6. 进程创建 sub-process-4(Active 最迟时刻)

因此,如果我的脚本在 [5] 处检查进程或子进程之一是否为 Active,它将返回 false 并终止!

简而言之:进程及其所有子进程处于Inactive 状态的时间跨度很短(即子进程被杀死和新子进程尚未产生之间的时间) .如果我的脚本此时检查状态,它会返回 false,因为一切都处于非活动状态。

谁能给我任何解决方案或解决这个问题?

while(bIsProcessActive == True):
    bIsProcessActive = False
    if (proc.is_running() and proc.status != psutil.STATUS_ZOMBIE):
        bIsProcessActive = True
        cpu_usage = proc.get_cpu_percent(interval = 2)
        memory_usage = proc.get_memory_info().rss
    for child in proc.get_children():
        if child.is_running() and child.status != psutil.STATUS_ZOMBIE:
            // Add to memory and CPU usage of parent process
            if bIsProcessActive == False and childutilization[0] == True:
                bIsProcessActive = True

【问题讨论】:

标签: python linux algorithm subprocess psutil


【解决方案1】:

由于您的流程可以让孩子在父母去世后幸存下来,因此您无法仅根据父母信息有效监控孩子,因为当父母退出时,孩子的父母 ID 变为 1 - 如果您没有设法获得父母去世前的孩子身份证,你再也找不到了。

解决此问题的一种方法是改用进程组 ID (pgid):进程及其所有后代将具有相同的 pgid。 仅当后代没有在流程组领导中转变自己时才有效,因此假设这在未来是正确的。

考虑到这一点,即使父进程不再运行,您也可以随时扫描正在运行的进程并找到子进程。

如果监控脚本本身成为进程组负责人,这可能会有所帮助 - 将 pgid 限制为仅其后代。

看看:

  • os.setpgrp()
  • os.getpgrp()
  • ps -eo pid,ppid,pgid

我在一个名为 BuildIn 的软件构建分析工具的监控脚本中使用了这种技术,您可以在这里查看它:https://buildin.apartsw.com/wrap.html。对不起广告

【讨论】:

  • 谢谢丹!您的意见肯定会帮助我使脚本更加健壮。
  • 但我面临的当前问题是 - 进程及其所有子进程处于非活动状态的时间跨度很短。(即子进程被杀死和新子进程之间的时间尚未生成)。如果我的脚本此时检查活动状态,则返回 false。
  • 实现在某处不正确,因为根据您的描述,父级此时仍在运行(否则它稍后无法启动新的子进程) - 因此它应该返回 true。或者描述不能反映实际发生的情况。
  • 我倾向于认为正在发生的事情是在last 迭代中的proc.get_children() 调用之后产生了子进程,其中父进程仍然活着——这正是你可以做到的。找不到我在回答中提到的。
猜你喜欢
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 2013-07-29
  • 1970-01-01
  • 2023-03-24
  • 2022-01-04
  • 2017-10-30
相关资源
最近更新 更多