【问题标题】:How to know the end time of a subprocess in Python(how to know the end time of a process in linux)Python中如何知道一个子进程的结束时间(linux中如何知道一个进程的结束时间)
【发布时间】:2021-05-09 12:21:30
【问题描述】:

我正在测试一些竞争条件,所以我需要知道进程的结束时间。我用python subprocess.popen 启动子进程我可以从Popen 对象中获取pid,但是我怎么知道它的结束时间?有没有办法直接从子流程模块中获取它?如果没有,在 Linux 中,是否有可能知道给定 pid 的结束时间? (我正在并行运行多个子进程,所以我不能只在 subprocess.popen 之后使用 time 类来知道结束时间,我认为子进程正在后台运行,所以我在想我是否可以只搜索这个 pid all时间,一旦它不存在(意味着它已经结束了),我就可以知道它的结束时间)

【问题讨论】:

  • 你能解释一下为什么,你认为你不能使用time.time() 吗? popen'知道'子进程何时完成,通常不需要轮询/搜索pid
  • @MauriceMeyer 因为我有 8 个子进程同时在后台运行,我不认为 time.time() 是任何子进程的结束时间

标签: python python-3.x linux unix subprocess


【解决方案1】:

我猜它可能起作用的一件事是使用一个线程进行测试,该线程检测某个进程何时被终止或完成。当该线程正在测试时,您可以尝试这样的事情: duration=ps -p *the process PID* -o etime 将返回正在执行的时间。 然后,当进程完成或被您杀死时,您可以使用duration 变量来检查时间。

这个脚本可以帮助你:

#!/bin/bash

while ps -p $1 > /dev/null; do 
        duration=`ps -p $1 -o etime`
        sleep 1; 
done;

echo "Process finished. Time: "$duration

其中 $1 表示传递给脚本的参数。此参数必须包含您的进程的 PID 号。 但是,如果不想通过向脚本传递参数来执行此操作,则可以在该脚本中获取进程的 PID 并执行您想要的操作。

【讨论】:

    猜你喜欢
    • 2013-11-17
    • 2021-05-09
    • 2020-04-02
    • 2011-11-30
    • 2016-04-20
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    相关资源
    最近更新 更多