使用psutil获取带有进程名称的进程ID

时间:2019-01-09 18:08:16

标签: python grep ansible psutil

我正在编写一个定制的ansible模块,以使用linux包psutil获取具有进程名称的进程ID。这是我的模块文件。

from ansible.module_utils.basic import AnsibleModule
import sys
try:
    import psutil
    HAS_PSUTIL = True
except ImportError:
    HAS_PSUTIL = False


def get_pid(name, module):
    return [int(p.info['pid']) for p in psutil.process_iter(attrs=['pid', 'name']) if name in p.info['name']]


def main():
    module = AnsibleModule(
        argument_spec={
            "name": {"required": True, "type": "str"}
        }
    )
    if not HAS_PSUTIL:
        module.fail_json(msg="Missing required 'psutil' python module. Try installing it with: pip install psutil")
    name = module.params["name"]
    response = dict(pids=get_pid(name, module))
    module.exit_json(**response)


if __name__ == '__main__':
    main()

可使用该模块的代码

- name: "Checking the process IDs (PIDs) of sleep binary" 
  pids: 
    name: "some-long-process-name-999999"
  register: pids
- name: "Verify that the Process IDs (PIDs) returned is not empty"
  assert:
    that:
    - "pids.pids | length > 0"

尝试使用长名称时,我得到的进程名称为空,对于小名称,它可以正常工作。 psutil模块有问题吗?我尝试了pidof和pgrep,它也似乎失败了。谁能帮我这个 ?谢谢您的时间。

0 个答案:

没有答案