首页 > 解决方案 > 使用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

标签: python-3.xlinuxservice

解决方案


您应该将进程命令行添加到attrs(属性)。

看看as_dict这个页面:

https://psutil.readthedocs.io/en/latest/#psutil.Process.as_dict

我认为该cmdline属性是您所需要的。


推荐阅读