【Python】在Linux下通过psutil获取进程和pid

本文介绍了如何使用Python的psutil库来获取系统中运行的所有进程的PID和名称。通过安装psutil并使用process_iter()函数,可以遍历所有进程并打印其PID和名称。

安装psutil

       pip install psutil

参考链接:https://blog.csdn.net/u014647208/article/details/81984709

代码:

import  psutil;
for proc in psutil.process_iter():
    print("pid-%d,name:%s" % (proc.pid,proc.name()))

运行结果:

pid-1,name:systemd
pid-2,name:kthreadd
pid-3,name:ksoftirqd/0
pid-5,name:kworker/0:0H
pid-6,name:kworker/u12:0
pid-7,name:rcu_sched
pid-8,name:rcu_bh
pid-9,name:migration/0
pid-10,name:watchdog/0
pid-11,name:watchdog/1
pid-12,name:migration/1
pid-13,name:ksoftirqd/1
pid-15,name:kworker/1:0H
pid-16,name:watchdog/2
pid-17,name:migration/2
pid-18,name:ksoftirqd/2
pid-20,name:kworker/2:0H
pid-21,name:watchdog/3
pid-22,name:migration/3
pid-23,name:ksoftirqd/3
pid-25,name:kworker/3:0H
pid-26,name:watchdog/4
pid-27,name:migration/4
pid-28,name:ksoftirqd/4
pid-30,name:kworker/4:0H
pid-31,name:watchdog/5
pid-32,name:migration/5
pid-33,name:ksoftirqd/5
pid-35,name:kworker/5:0H
pid-36,name:kdevtmpfs
pid-37,name:netns
pid-38,name:perf
pid-39,name:khungtaskd
pid-40,name:writeback
pid-41,name:khugepaged
pid-42,name:crypto
pid-43,name:bioset
pid-44,name:kblockd
pid-45,name:kworker/4:1
pid-46,name:devfreq_wq
pid-47,name:cfg80211
pid-48,name:cfinteractive
pid-50,name:rpciod
pid-51,name:kworker/5:1
pid-66,name:kswapd0
pid-67,name:vmstat
pid-68,name:fsnotify_mark
pid-69,name:SquashFS
pid-70,name:nfsiod
pid-101,name:irq/231-rockchi
pid-102,name:irq/232-rockchi
pid-103,name:vcodec
pid-104,name:irq/48-ff650000
pid-105,name:irq/47-ff650000
pid-106,name:kworker/0:1
pid-107,name:vcodec
pid-108,name:irq/50-ff660000
pid-109,name:bioset
pid-110,name:bioset
pid-111,name:bioset
pid-112,name:bioset
pid-113,name:bioset
pid-114,name:bioset
pid-115,name:bioset
pid-116,name:bioset
pid-117,name:bioset
pid-118,name:bioset
pid-119,name:nvme
pid-122,name:goodix_wq
pid-123,name:irq/124-rk808
pid-124,name:fusb302_wq
pid-125,name:irq/105-fusb302
pid-126,name:irq/40-rockchip
pid-127,name:dm_bufio_cache
pid-129,name:irq/27-mmc1
pid-131,name:kworker/1:1
pid-132,name:ipv6_addrconf
pid-133,name:krfcommd
pid-135,name:bioset
pid-136,name:mmcqd/1
pid-137,name:bioset
pid-138,name:mmcqd/1boot0
pid-139,name:bioset
pid-140,name:mmcqd/1boot1
pid-141,name:bioset
pid-142,name:mmcqd/1rpmb
pid-143,name:kworker/2:1
pid-144,name:deferwq
pid-145,name:irq/244-rockchi
pid-146,name:irq/245-rockchi
pid-147,name:irq/246-rockchi
pid-148,name:irq/65-analogix
pid-150,name:hpd_queue
pid-151,name:irq/64-ff940000
pid-152,name:kworker/0:3
pid-153,name:scsi_eh_0
pid-154,name:scsi_tmf_0
pid-155,name:usb-storage
pid-156,name:kworker/u12:2
pid-157,name:gpu_power_off_w
pid-158,name:kworker/u13:0
pid-160,name:kbase_job_fault
pid-162,name:kworker/u12:3
pid-199,name:kworker/4:1H
pid-200,name:kworker/5:1H
pid-204,name:wl_escan_handle
pid-205,name:dhd_watchdog_th
pid-206,name:dhd_dpc
pid-207,name:dhd_rxf
pid-208,name:kworker/0:1H
pid-209,name:bioset
pid-226,name:jbd2/mmcblk1p7-
pid-227,name:ext4-rsv-conver
pid-265,name:systemd-journald
pid-273,name:kworker/5:3
pid-278,name:kworker/2:3
pid-280,name:systemd-udevd
pid-282,name:kworker/1:3
pid-283,name:kworker/3:2
pid-295,name:kworker/3:3
pid-323,name:kworker/4:3
pid-349,name:kworker/1:1H
pid-434,name:kworker/3:1H
pid-448,name:kworker/2:1H
pid-459,name:systemd-resolved
pid-464,name:systemd-timesyncd
pid-499,name:dbus-daemon
pid-514,name:NetworkManager
pid-516,name:udisksd
pid-518,name:ModemManager
pid-521,name:wpa_supplicant
pid-523,name:networkd-dispat
pid-524,name:systemd-logind
pid-538,name:polkitd
pid-565,name:sshd
pid-573,name:dnsmasq
pid-582,name:dhd_eventd
pid-607,name:hci0
pid-608,name:hci0
pid-610,name:hciattach
pid-611,name:kworker/u13:2
pid-612,name:lcd2usb_print
pid-613,name:rc.local
pid-614,name:robot.sh
pid-616,name:robot.sh
pid-617,name:bluetoothd
pid-618,name:robot
pid-619,name:login
pid-620,name:login
pid-720,name:systemd
pid-723,name:sd-pam
pid-737,name:bash
pid-837,name:bash
pid-859,name:dhclient
pid-868,name:dnsmasq
pid-938,name:sudo
pid-942,name:python
<think> 首先,用户的问题是关于如何使用 Python3 psutil 库通过进程名称查找进程PID。用户指定了 Python3 psutil 库。 从系统级指令中,我有以下要求: - 对于行内数学表达式,使用 $...$ 格式。 - 独立公式使用 $$...$$ 并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 引用的段落末尾自然地添加引用标识,如 [^1]。 用户提供了几个引用:[1] 到 [5],我需要参考这些来回答问题。引用内容涉及使用 psutil 获取进程信息。 关键引用: - 引用[1] 展示了获取所有进程、通过名称 PID 获取特定进程的代码。 - 引用[2] 描述了 psutil 库的功能。 - 引用[3] 有安装信息。 - 引用[4] [5] 显示了进程列表。 具体到用户查询:"通过进程名称查找进程 PID",引用[1] 中有相关代码: ```python def get_process_by_name(process_name): for process in psutil.process_iter(attrs=[&#39;name&#39;, &#39;pid&#39;, &#39;status&#39;]): if process.info[&#39;name&#39;] == process_name: return process.info return None ``` 这个函数返回进程信息,其中包括 PID。 用户想要的是 PID,所以我应该提取 PID。 用户说:"通过进程名称查找进程 PID",意思是找到匹配名称的进程PID。 在代码中,可以直接返回 PID 而不是整个 info。 此外,可能有多个进程有相同的名称,所以我应该返回一个列表或多个 PID。 步骤: 1. 安装 psutil(如果需要)。 2. 使用 psutil.process_iter() 遍历进程3. 检查进程名称是否匹配。 4. 收集 PID。 从引用[1],可以直接使用: ```python import psutil def get_pid_by_name(process_name): pids = [] for process in psutil.process_iter(attrs=[&#39;name&#39;, &#39;pid&#39;]): if process.info[&#39;name&#39;] == process_name: pids.append(process.info[&#39;pid&#39;]) return pids ``` 或者,如果只有一个进程,可以返回一个 PID,但最好处理多个情况。 回答结构: - 清晰、逐步解决问题。 - 使用中文。 - 结束时生成相关问题。 - 添加引用标识。 大纲回答: 1. 介绍:使用 psutil 查找 PID。 2. 代码示例:提供一个函数来通过名称获取 PID3. 解释代码。 4. 注意事项,如多个进程。 5. 生成相关问题。 引用标识:我需要自然地添加引用。例如,提到 psutil 库时,添加 [^2]。 在回答中: - 当介绍 psutil 时,引用 [^2]。 - 当使用代码时,引用 [^1]。 用户引用是 [1] 到 [5],所以我应该使用类似 [^1], [^2] 等。 在回答末尾,添加相关问题。 最终回答: - 开头:解释方法。 - 代码块:Python 代码。 - 解释。 - 相关问题。 确保 LaTeX:用户查询中没有数学表达式,但如果需要,添加正确格式。这里可能不需要数学公式。 </think> ### Python3 使用 psutil 库通过进程名称查找 PID 的方法 在 Python3 中,使用 `psutil` 库通过进程名称查找对应的进程 ID (PID) 非常简单。`psutil` 是一个跨平台的库,支持 Windows、Linux macOS 系统,能够高效获取系统进程信息[^2]。以下是详细的实现步骤代码示例。 #### 核心方法 1. **安装 psutil 库**:如果尚未安装,可通过 pip 安装: ```bash pip install psutil ``` 引用[3]提到可从官方源下载源码包安装[^3]。 2. **通过进程名称查找 PID**: - 使用 `psutil.process_iter()` 迭代所有进程。 - 检查每个进程的名称 (`name` 属性) 是否匹配目标名称。 - 收集匹配进程PID(可能多个进程共享相同名称)。 - 以下是完整代码示例: ```python import psutil def find_pids_by_name(process_name): """ 通过进程名称查找所有匹配的 PID。 :param process_name: 目标进程名称(如 &#39;python.exe&#39;) :return: 匹配 PID 的列表(空列表表示未找到) """ pids = [] # 存储匹配的 PID # 遍历所有进程,指定获取 &#39;name&#39; &#39;pid&#39; 属性以提高效率 for process in psutil.process_iter(attrs=[&#39;name&#39;, &#39;pid&#39;]): try: # 获取进程信息字典 process_info = process.info # 检查名称是否匹配(忽略大小写以增强鲁棒性) if process_info[&#39;name&#39;].lower() == process_name.lower(): pids.append(process_info[&#39;pid&#39;]) except (psutil.NoSuchProcess, psutil.AccessDenied): # 跳过已终止或无权限的进程 continue return pids # 示例用法 if __name__ == "__main__": target_name = "python.exe" # 替换为你的目标进程名 matched_pids = find_pids_by_name(target_name) if matched_pids: print(f"进程 &#39;{target_name}&#39; 的 PID:{matched_pids}") else: print(f"未找到名为 &#39;{target_name}&#39; 的进程") ``` #### 代码解释 - **迭代进程**:`psutil.process_iter(attrs=[&#39;name&#39;, &#39;pid&#39;])` 遍历所有进程,仅获取名称 PID 属性,减少开销[^1]。 - **名称匹配**:使用 `lower()` 方法确保大小写不敏感(例如,处理 Windows 的 &#39;.exe&#39; 后缀)。 - **错误处理**:添加 `try-except` 块捕获进程终止或无权限异常,避免程序崩溃[^2]。 #### 注意事项 - **多个同名进程**:一个进程名称可能对应多个 PID(如多个浏览器实例),因此返回值是列表。 - **权限要求**:在 Linux/macOS 上,可能需要 root 权限才能访问所有进程信息。 - **效率优化**:若系统进程较多,指定 `attrs` 参数可加速查询(避免加载不必要属性)[^1]。 通过上述方法,你可以可靠地通过进程名称获取 PID。实际输出示例如引用[5]中的 PID 列表[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值