System Administration

Arrêt efficace des processus depuis des fichiers batch avec Python

Spread the love

Cet article explore comment terminer des processus en cours d’exécution à l’aide de fichiers batch, améliorés par la puissance et la flexibilité de Python. Nous aborderons deux méthodes Python — l’utilisation du module os et de la bibliothèque psutil plus robuste — puis nous les intégrerons dans des fichiers batch conviviaux.

Table des matières

Utilisation du module os de Python

Le module os de Python offre une interaction basique avec le système d’exploitation, y compris la terminaison des processus. Cependant, il est moins fiable que psutil, nécessitant l’ID de processus (PID) précis et manquant de gestion des erreurs pour plusieurs processus portant le même nom. Cette méthode est plus simple mais potentiellement moins robuste.


import os
import sys

def kill_process(pid):
    try:
        os.kill(int(pid), 9)  # Signal SIGKILL
        print(f"Processus avec PID {pid} terminé.")
    except OSError as e:
        print(f"Erreur lors de la terminaison du processus {pid} : {e}")

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Utilisation : python kill_process.py ")
        sys.exit(1)
    kill_process(sys.argv[1])

Ce script accepte le PID comme argument de ligne de commande et utilise os.kill() avec le signal 9 (SIGKILL) pour une terminaison forcée. L’utilisation de SIGKILL peut entraîner une perte de données ; utilisez-le avec précaution.

Utilisation de la bibliothèque psutil de Python

La bibliothèque psutil fournit une approche plus avancée et multiplateforme de la gestion des processus. Elle permet l’identification par nom et gère efficacement plusieurs instances.


import psutil
import sys

def kill_process_by_name(process_name):
    for proc in psutil.process_iter(['pid', 'name']):
        try:
            if proc.info['name'].lower() == process_name.lower(): # correspondance insensible à la casse
                proc.kill()
                print(f"Processus '{process_name}' (PID : {proc.info['pid']}) terminé.")
        except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess) as e:
            print(f"Erreur lors de la terminaison du processus '{process_name}' : {e}")

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Utilisation : python kill_process_by_name.py ")
        sys.exit(1)
    kill_process_by_name(sys.argv[1])

Ce script prend le nom du processus en entrée et itère sur les processus en cours d’exécution, terminant ceux qui correspondent au nom. La gestion des erreurs est incluse. Installez psutil à l’aide de : pip install psutil

Création d’un fichier batch

Créons un fichier batch pour exécuter le script psutil (enregistrez le script ci-dessus sous le nom kill_process_by_name.py). Créez un fichier batch (par exemple, kill_process.bat) :


@echo off
python kill_process_by_name.py "notepad"
pause

Remplacez « notepad » par le nom du processus cible. Assurez-vous que Python est dans la variable d’environnement PATH de votre système.

Bonnes pratiques et considérations

Privilégiez toujours la méthode psutil pour sa robustesse. Soyez prudent lorsque vous terminez de force des processus, car une perte de données est possible. Évitez de terminer les processus système critiques. Envisagez d’ajouter une journalisation à votre script Python pour une meilleure surveillance et un meilleur suivi des erreurs.

Dépannage

  • « Accès refusé » : Nécessite des privilèges d’administrateur pour exécuter le fichier batch.
  • Script Python ne s’exécutant pas : Vérifiez que Python est dans votre PATH, que l’interpréteur Python est correctement spécifié et que le chemin du script est correct.
  • Processus non trouvé : Vérifiez le nom du processus (sensible à la casse dans certains cas). Utilisez le Gestionnaire des tâches pour confirmer le nom exact.

Ce guide amélioré fournit une approche plus robuste et plus sûre de la gestion des processus à partir d’un fichier batch. N’oubliez pas de procéder avec prudence lors de la terminaison des processus.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *