如何获取python3工作程序的PID

如何获取python3工作程序的PID

我想在 bash 上编写一个程序,每隔一段时间重新启动一次脚本。该程序以无限循环运行并按如下方式启动:

Python3 main.py

因此,要重新启动它,我需要 Kill [pid]先执行,然后再重新启动它。那么我如何获取 pid?我过去常常手动重新启动,查看列表ps -ef。我试图获取pidof python3- 它给了我 5 个 pid,我不喜欢,因为我真的不明白我需要哪一个。如果我写类似的东西pidof "python3 main.py"- 它找不到任何东西。

ps -ef 列表中的进程屏幕截图

测试演示程序:

#!/bin/python3
import time

x = 1
 
while True:
    print(x)
    x +=1
time.sleep(10)

答案1

有几种方法,按优先顺序排列:

  1. 使用服务管理器,例如 systemd。服务管理器负责跟踪 PID,您只需告诉它按名称重新启动服务,例如:

    systemctl --user restart MyScript
    
  2. 让脚本将其自己的 PID 写入“PID 文件”,然后您可以使用 shell 的 读取该文件$(<file)。脚本可以通过 访问其自己的 PID os.getpid()

    kill $(< ~/myscript.pid)
    
  3. 使用 shell&将脚本作为后台作业运行,这样您可以$!在作业生成后立即访问 PID。然后您可以将值写入$!“PID 文件”(或者如果需要,可以立即在循环中使用它)。

相关内容