【问题标题】:Note down time when a process stops记录进程停止的时间
【发布时间】:2012-08-15 00:43:28
【问题描述】:

我已经开始处理几个文件。我记下了处理开始的(时钟)时间。完成时间太长,我想睡觉,但我想记下处理停止的时间。我不想要一个非常精确的时间读数,时钟时间对我来说还可以。 有什么工具、命令或小脚本可以帮助我实现这一点。

感谢您的帮助。

我在 ubuntu 12.04 机器上运行一个可执行文件来处理多个文件。

【问题讨论】:

  • 是脚本还是代码 .. 您正在执行并想记下处理时间(完成时)..
  • 作为 linux 用户,您不想在有事情进行时进入睡眠状态。但是,如果您的处理涉及 shell 脚本,您是否尝试过 echo在脚本顶部和底部设置开始和结束时间?
  • @Chronicles,它是一个 C++ 程序可执行文件。它已经开始执行。我在考虑一个脚本,它会一直 grepping 进程的 pid,直到找不到并显示那个时间。
  • @Aditya 只需尝试一次 time 命令......正如我在答案中提到的......

标签: python linux unix time timestamp


【解决方案1】:

你可以使用这个小小的 python 脚本

import datetime
import subprocess
import time
import sys

p = subprocess.Popen(sys.argv[1:])

while p.poll() is None:
    time.sleep(1)

sys.stderr.write("Process finished at %s\n" % datetime.datetime.now())

例子:

/tmp/watcher.py sleep 10
Process finished at 2012-08-19 10:38:11.233989

【讨论】:

    【解决方案2】:

    您可以使用psutil module(跨平台)了解新进程和已运行进程的进程何时完成。当基于sleep() 的解决方案时,它可能会提供更好的精度:

    #!/usr/bin/env python
    """Print the finish time for a process specified by <pid>.
    
    Usage:
        process-finish-time <pid>
    """
    import sys
    from datetime import datetime
    from psutil import NoSuchProcess, Process # pip install psutil
    
    try:
        pid = int(sys.argv[1])
    except (IndexError, ValueError):
        sys.exit(__doc__)
    
    try:
        p = Process(pid) # OR use `psutil.Popen()` to start a new process
    except NoSuchProcess as e:
        sys.exit(e)
    
    name = None
    while p.is_running():
        name = p.name
        p.wait() # block until the process ends
    print("Process (%s) finished at %s UTC" % (name, datetime.utcnow()))
    

    如果您想在进程运行时执行某些操作,可以将timeout 传递给p.wait()

    【讨论】:

      【解决方案3】:

      时间命令可能会帮助你

      格式

      $> time <command>
      

      例如:如果是 bash 脚本

      $> time sh Test.sh
      

      输出

      real    0m0.004s
      user    0m0.001s
      sys     0m0.002s
      

      【讨论】:

      • 既然进程已经开始了,我怎么能用time命令呢。如果我在开始进程之前使用time 命令会很有帮助。
      【解决方案4】:

      最后我能够编写一个帮助我的 python 脚本。重要的要求是,即使进程已经启动,我也应该能够知道时间(进程停止的时间)。我希望下面的脚本能帮助遇到这个问题的其他人。

      import datetime
      import commands
      import time
      import sys 
      
      def main(argv):
        if len(argv) < 2:
          sys.stderr.write("Usage: %s <action>" % (argv[0],))
          return 1
        output = commands.getoutput("ps -e")
        while argv[1] in output:
          output = commands.getoutput("ps -e")
          print argv[1], " running", datetime.datetime.now() 
          #it should be set depending upon the precision a user wants.
          time.sleep(5)
        sys.stderr.write("Process finished at %s\n" % datetime.datetime.now())
      
      if __name__ == "__main__":
        sys.exit(main(sys.argv))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多