【发布时间】:2020-09-23 08:16:03
【问题描述】:
我实际上在后台运行了 python 脚本,你可以看到当我使用命令 "ps -aux" 时它是如何显示的:
root 405 0.0 2.6 34052 25328 ? S 09:52 0:04 python3 -u /opt/flask_server/downlink_server/downlink_manager.py
我想检查这个脚本是否从另一个 python 脚本运行,所以我尝试使用 psutil 模块,但它只是检测到 python3 正在运行,但不是我的脚本准确! 有我的 python 脚本:
import os
import psutil
import time
import logging
import sys
for process in psutil.process_iter():
if process.cmdline() == ['python3', '/opt/flask_server/downlink_server/downlink_manager.py']:
print('Process found: exiting.')
看起来很简单,但相信我,我已经尝试过其他主题提出的其他功能,例如:
def find_procs_by_name(name):
"Return a list of processes matching 'name'."
ls = []
for p in psutil.process_iter(attrs=["name", "exe", "cmdline"]):
if name == p.info['name'] or \
p.info['exe'] and os.path.basename(p.info['exe']) == name or \
p.info['cmdline'] and p.info['cmdline'][0] == name:
ls.append(p)
return ls
ls = find_procs_by_name("downlink_manager.py")
但是这个函数没有找到我的脚本,它可以工作,当我搜索 python3 但不是脚本的名称时。
当然我试着把脚本的所有路径都放了但是什么也没有,你能帮帮我吗?
【问题讨论】:
-
请注意,如果第一个进程预期被监视,它应该维护一个PID文件/锁。参见例如What is a .pid file and what does it contain?
-
您的
ps输出显示python3 -u /opt/...,但您的Python 代码会检查process.cmdline() == ['python3', '/opt/...'(请注意缺少的-u)。这是故意的吗? -
@MisterMiyagi 我也尝试了'python3 -u',但没有任何改变
标签: python python-3.x linux psutil