亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python如何精準(zhǔn)判斷某個進(jìn)程是否在運行

 更新時間:2025年04月24日 14:23:55   作者:程序員總部  
這篇文章主要為大家詳細(xì)介紹了Python如何精準(zhǔn)判斷某個進(jìn)程是否在運行,本文為大家整理了3種方法并進(jìn)行了對比,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、為什么需要判斷進(jìn)程是否存在

想象這個場景:你寫了一個自動化腳本,需要先檢查某個后臺服務(wù)是否已經(jīng)啟動。如果直接運行你的程序,而依賴的服務(wù)沒啟動,整個系統(tǒng)就可能崩潰。這時候,用Python自動檢測進(jìn)程是否存在就成了關(guān)鍵能力!

比如:

  • 監(jiān)控服務(wù)器上的MySQL是否意外崩潰
  • 確保爬蟲程序沒有重復(fù)啟動
  • 檢查殺毒軟件是否正常運行

這些需求都需要一個可靠的方法來判斷進(jìn)程狀態(tài)。下面我們就用Python實現(xiàn)這個功能!

二、方法1:用psutil庫(推薦)

psutil是Python最強的系統(tǒng)監(jiān)控庫之一,跨平臺支持Windows/Linux/Mac。安裝它:

pip install psutil

檢查Chrome是否運行的代碼:

import psutil

def is_process_running(process_name):
    for proc in psutil.process_iter(['name']):
        if proc.info['name'] == process_name:
            return True
    return False

if is_process_running('chrome.exe'):
    print("Chrome正在運行!")
else:
    print("Chrome未運行")

優(yōu)點:

  • 代碼簡潔
  • 支持模糊匹配(比如只輸入"chrome")
  • 能獲取進(jìn)程詳細(xì)信息(CPU、內(nèi)存等)

實測數(shù)據(jù):

在測試機上掃描1000個進(jìn)程只需0.02秒!

三、方法2:用os.system調(diào)用系統(tǒng)命令

不同操作系統(tǒng)要用不同命令:

Windows系統(tǒng):

import os

def check_process_win(process_name):
    return os.system(f'tasklist | find "{process_name}"') == 0

print("Notepad運行中" if check_process_win('notepad.exe') else "未找到記事本")

Linux/Mac系統(tǒng):

def check_process_linux(process_name):
    return os.system(f'pgrep -f "{process_name}"') == 0

缺點:

  • 依賴系統(tǒng)命令
  • 不同平臺要寫不同代碼
  • 性能較差(每次都要啟動新進(jìn)程)

四、方法3:用subprocess獲取詳細(xì)進(jìn)程信息

想要更靈活地處理進(jìn)程信息?可以用subprocess模塊:

import subprocess

def get_process_details(name):
    try:
        output = subprocess.check_output(['ps', '-aux']).decode()
        return [line for line in output.split('\n') if name in line]
    except:
        return []

chrome_processes = get_process_details('chrome')
print(f"找到{len(chrome_processes)}個Chrome進(jìn)程")

適用場景:

  • 需要獲取進(jìn)程的完整命令行參數(shù)
  • 要分析進(jìn)程的資源占用情況

五、性能對比測試

我們在同一臺機器上測試3種方法(檢測chrome.exe):

方法耗時(秒)跨平臺信息詳細(xì)度
psutil0.02?★★★★★
os.system0.15?★★☆☆☆
subprocess0.12?★★★★☆

顯然,psutil是綜合最優(yōu)解!它不僅快,還能獲取進(jìn)程的CPU、內(nèi)存等詳細(xì)信息。如果你經(jīng)常需要做系統(tǒng)監(jiān)控,這個庫絕對要掌握。

六、實際應(yīng)用案例

案例1:防止腳本重復(fù)運行

import psutil
import sys

current_pid = os.getpid()
for proc in psutil.process_iter(['pid', 'name']):
    if proc.info['name'] == 'python.exe' and proc.info['pid'] != current_pid:
        print("已有Python進(jìn)程在運行!")
        sys.exit()

案例2:監(jiān)控服務(wù)自動重啟

import time

while True:
    if not is_process_running('nginx.exe'):
        os.system('start nginx')  # Windows啟動命令
        print("檢測到Nginx崩潰,已重啟!")
    time.sleep(60)  # 每分鐘檢查一次

七、常見問題解答

Q:為什么找不到剛啟動的進(jìn)程?

A:進(jìn)程可能需要幾毫秒才能注冊到系統(tǒng),建議檢測時加短暫延遲。

Q:如何匹配帶參數(shù)的進(jìn)程?

# 用psutil的cmdline屬性
[p.cmdline() for p in psutil.process_iter() if 'python' in p.name()]

Q:檢測到進(jìn)程后能做什么?

  • 結(jié)束進(jìn)程:process.terminate()
  • 獲取資源占用:process.cpu_percent()
  • 分析子進(jìn)程:process.children()

八、完整代碼模板

import psutil

class ProcessMonitor:
    @staticmethod
    def is_running(name):
        """檢查進(jìn)程是否存在"""
        return name in (p.name() for p in psutil.process_iter(['name']))
    
    @staticmethod
    def kill_process(name):
        """結(jié)束指定進(jìn)程"""
        for proc in psutil.process_iter(['name']):
            if proc.info['name'] == name:
                proc.kill()
                return True
        return False

???????# 使用示例
if ProcessMonitor.is_running('notepad.exe'):
    print("發(fā)現(xiàn)記事本進(jìn)程")
    ProcessMonitor.kill_process('notepad.exe')

九、總結(jié)

判斷進(jìn)程是否存在看似簡單,但實際要考慮:

  • 跨平臺兼容性:Windows和Linux命令完全不同
  • 性能要求:頻繁檢測時需要高效方法
  • 擴展需求:是否要獲取進(jìn)程詳細(xì)信息

推薦選擇:

  • 一般情況用psutil(簡單可靠)
  • 特殊需求用subprocess(靈活控制)
  • 臨時測試用os.system(快速驗證)

到此這篇關(guān)于Python如何精準(zhǔn)判斷某個進(jìn)程是否在運行的文章就介紹到這了,更多相關(guān)Python判斷進(jìn)程是否運行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺析Python中的套接字編程

    淺析Python中的套接字編程

    不可否認(rèn),互聯(lián)網(wǎng)已成為“存在之魂”,其活動以“連接”或“網(wǎng)絡(luò)”為特征。使用套接字的最關(guān)鍵的基礎(chǔ)之一,使這些網(wǎng)絡(luò)成為可能。本文涵蓋了有關(guān)使用Python進(jìn)行套接字編程的所有領(lǐng)域。套接字可以幫助您建立這些連接,而Python無疑可以簡化連接
    2021-06-06
  • python?DataFrame中l(wèi)oc與iloc取數(shù)據(jù)的基本方法實例

    python?DataFrame中l(wèi)oc與iloc取數(shù)據(jù)的基本方法實例

    這篇文章主要給大家介紹了關(guān)于python?DataFrame中l(wèi)oc與iloc取數(shù)據(jù)的基本方法,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-02-02
  • 如何利用pandas將Excel轉(zhuǎn)為html格式

    如何利用pandas將Excel轉(zhuǎn)為html格式

    工作中經(jīng)常會遇到Excel轉(zhuǎn)為html格式這種需求,下面這篇文章主要給大家介紹了關(guān)于如何利用pandas將Excel轉(zhuǎn)為html格式的相關(guān)資料,主要利用的是pd.to_html,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08
  • 通過Python模塊filecmp 對文件比較的實現(xiàn)方法

    通過Python模塊filecmp 對文件比較的實現(xiàn)方法

    這篇文章主要介紹了通過Python模塊filecmp 對文件比較的實現(xiàn)方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • 一文帶你解密Python可迭代對象的排序問題

    一文帶你解密Python可迭代對象的排序問題

    這篇文章主要為大家詳細(xì)介紹一下Python中可迭代對象的排序問題,文中的示例代碼講解詳細(xì),對我們深入了解Python有一定幫助,感興趣的可以了解一下
    2022-07-07
  • python如何在pygame中設(shè)置字體并顯示中文詳解

    python如何在pygame中設(shè)置字體并顯示中文詳解

    再簡單的游戲界面中均涉及文字處理,下面這篇文章主要給大家介紹了關(guān)于python如何在pygame中設(shè)置字體并顯示中文的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • Python如何去除字符串中不需要的字符

    Python如何去除字符串中不需要的字符

    這篇文章主要介紹了Python如何去除字符串中不需要的字符問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 解析Mac OS下部署Pyhton的Django框架項目的過程

    解析Mac OS下部署Pyhton的Django框架項目的過程

    這篇文章主要介紹了Mac OS下部署Pyhton的Django框架項目的過程,還附帶將了一個gunicorn結(jié)合Nginx來部署Django應(yīng)用的方法,需要的朋友可以參考下
    2016-05-05
  • python篩選出兩個文件中重復(fù)行的方法

    python篩選出兩個文件中重復(fù)行的方法

    這篇文章主要為大家詳細(xì)介紹了python篩選出兩個文件中重復(fù)行的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • pymysql模塊使用簡介與示例

    pymysql模塊使用簡介與示例

    這篇文章主要介紹了pymysql模塊使用的相關(guān)資料,幫助大家更好的利用python操作MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-11-11

最新評論