有没有办法在Python中通过进程名获取PID?

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND                                                                                        
 3110 meysam    20   0  971m 286m  63m S  14.0  7.9  14:24.50 chrome 

例如,我需要在chrome之前得到3110.

推荐答案

您可以使用pidofsubprocess.check_output按名称获取进程的pid:

from subprocess import check_output
def get_pid(name):
    return check_output(["pidof",name])


In [5]: get_pid("java")
Out[5]: '23366\n'

check_output(["pidof",name])将以"pidof process_name"If the return code was non-zero it raises a CalledProcessError.的形式运行命令

要处理多个条目并转换为整数:

from subprocess import check_output
def get_pid(name):
    return map(int,check_output(["pidof",name]).split())

在[21]:获取pid("chrome")

Out[21]: 
[27698, 27678, 27665, 27649, 27540, 27530, 27517, 14884, 14719, 13849, 13708, 7713, 7310, 7291, 7217, 7208, 7204, 7189, 7180, 7175, 7166, 7151, 7138, 7127, 7117, 7114, 7107, 7095, 7091, 7087, 7083, 7073, 7065, 7056, 7048, 7028, 7011, 6997]

或通过pas -s标志获得单个pid:

def get_pid(name):
    return int(check_output(["pidof","-s",name]))

In [25]: get_pid("chrome")
Out[25]: 27698

Linux相关问答推荐

使用sed或awk映射自定义和任意函数

Flutter 构建错误:';DART:JS_interop';在此平台上不可用

仅在 Linux 上出现 AWS RDS `flush tables` 错误的 mysqldump

输出特定字符的所有列号

为什么我的 Docker 进程不断在我的 Raspberry Pi 上重新启动?

如何从 2 个文件中获取内容并使用 shell 脚本将该内容附加到新文件中

Bash 更新 yaml 文件中的图像值

如何在ubuntu中通过.sh文件启动多个服务

将 awk 输出保存到变量

通过 Linux FrameBuffer 将像素绘制到屏幕上

如何获取WiFi网络接口的MAC地址?

何时判断 EINTR 并重复函数调用?

分段故障处理

带有 curl 的 Linux 脚本来判断 Web 服务是否已启动

如何在没有 IDE 的情况下构建和部署三星 SmartTV 应用程序(例如:在 Linux 上)

可以通过 SSH 连接的所有用户的列表

我可以打开一个套接字并将其传递给 Linux 中的另一个进程吗

.NET Core 中的跨平台文件名处理

仅当文件存在于 shell 脚本中时才移动

在 Docker 容器中运行的 JVM 的驻留集大小 (RSS) 和 Java 总提交内存 (NMT) 之间的差异