python-3.x - 使用python,如何获取linux上正在运行的服务的名称
问题描述
我在 linux 上有一个小的服务 neo.service 文件
[Unit]
Description= dev script
After=network.target
StartLimitIntervalSec=0
[Service]
Environment="POSTGRES_PASS="
Environment="LD_LIBRARY_PATH=/opt/PostgreSQL-11/postgresql-11.0/lib/"
Type=simple
Restart=always
RestartSec=1
User=fmciodmsapp
ExecStart=python3 session_initiator.py config_as_initiator POSTGRES_CONFIG
[Install]
WantedBy=multi-user.target
使用以下命令在 linux 上启动服务:
sudo systemctl start neo
使用python,我如何编写代码来显示正在运行的进程。我根据其他论坛上的建议在下面写了这篇文章。
def get_list_of_processes():
listOfProcObjects = []
import psutil
for proc in psutil.process_iter():
try:
pinfo = proc.as_dict(attrs=['pid', 'name', 'username'])
pinfo['vms'] = proc.memory_info().vms / (1024 * 1024)
listOfProcObjects.append(pinfo);
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
listOfProcObjects = sorted(listOfProcObjects, key=lambda procObj: procObj['vms'], reverse=True)
return listOfProcObjects
为了列出进程,我这样做(因为启动的进程是由用户 ID serviceuser
for a in x:
if a['username'] == 'serviceuser':
print(a)
输出是:
{'name': 'python3', 'username': 'serviceuser', 'pid': 24500, 'vms': 749.0859375}
{'name': 'python3', 'username': 'serviceuser', 'pid': 24406, 'vms': 612.59375}
{'name': 'httpd', 'username': 'serviceuser', 'pid': 31539, 'vms': 419.37890625}
{'name': 'httpd', 'username': 'serviceuser', 'pid': 31540, 'vms': 355.37890625}
显然,从输出来看,可以看到有两个 python 进程在运行。我的挑战是 - 我怎么知道哪个是
python3 session_initiator.py config_as_initiator POSTGRES_CONFIG
解决方案
您应该将进程命令行添加到attrs
(属性)。
看看as_dict
这个页面:
https://psutil.readthedocs.io/en/latest/#psutil.Process.as_dict
我认为该cmdline
属性是您所需要的。
推荐阅读
- flutter - Admob 使用颤振找不到配置
- javascript - 反应firebase firestore插入json
- html - 在选择标签中显示选项的文本,而选项具有图像和文本
- python - 正则表达式,从 API 输入中提取带小数位的数字
- c++ - 64 字节边界上的“unsigned long”的 C++ 对齐数组或向量,以及相关的 delete[]
- javascript - HTML脚本标签中的Petite-vue Init属性
- javascript - 反应异步选择在选择中添加新选项未更新
- perl - 哪个版本的 Perl 引入了词法我的子程序?
- javascript - 将数据从 HTML 表单发送到 Express API
- python - 熊猫链接仅使用应用或管道修改数据框中的一列