Python 通过 pid 监控进程

Python monitor process by pid

我正在寻找比我更好的想法,或者您可以告诉我我在哪里犯了错误。我正在尝试做什么。

  1. 我尝试 运行 使用子进程和线程处理它 运行 很好,这里没有发现错误,Linux 中的命令有一个超时。
  2. 我得到了 pid 3.Than 我想通过 pid 监控进程,当它完成后做一些事情
def monitor_func(my_obj):
               print(my_obj.process_pid)
               sleep(20)
               while os.kill(my_obj.process_pid, 0) is None:
                     print("proc is running")
                     try:
                         os.kill(my_obj.process_pid, 0)
                     except OSError:
                         continue
               else:
                      print("proc is stopped")

问题是什么? While 循环无限工作。 os.kill(my_obj.process_pid, 0) 总是 returns NONE 提前致谢!

不确定我的理解是否正确,但我假设您正在尝试确定某些进程是否仍然 运行 由 PID。

您的代码的主要问题是 os.kill 不返回任何值,因此您将始终得到 None。所以循环永远不会停止。


考虑以下几点:

def monitor_func(pid): # no need to pass the object as we aren't using it
    print(pid)
    while True:
      try:
        os.kill(pid, 0) # 0 doesn't send any signal, but does error checks
      except OSError:
        print("Proc exited")
      else:
        print("Proc is still running")
        sleep(20)

假设您使用正确的 PID 并具有适当的权限,这将主要起作用。