Gérer les processus en cours d'exécution sur macOS
Surveillez et contrôlez les processus en cours d'exécution sur vos appareils MacFleet en utilisant des outils en ligne de commande. Ce tutoriel couvre la surveillance du CPU, l'analyse de la mémoire, la liste des processus et la terminaison de processus pour une gestion système efficace.
Comprendre la gestion des processus macOS
macOS fournit plusieurs outils en ligne de commande pour la gestion des processus :
top
- Affichage en temps réel des processus en cours et de l'utilisation systèmeps
- Instantané des processus actuelskill
- Terminer des processus par PID- Moniteur d'activité - Équivalent GUI pour la surveillance visuelle
Afficher l'utilisation du CPU
Utilisation basique du CPU
#!/bin/bash
# Afficher l'utilisation actuelle du CPU
top -l 1 -s 0 | grep "CPU usage"
echo "Utilisation du CPU récupérée avec succès"
Analyse détaillée du CPU
#!/bin/bash
# Obtenir des informations complètes sur le CPU
echo "=== Analyse d'utilisation du CPU ==="
echo "Utilisation actuelle du CPU :"
top -l 1 -s 0 | grep "CPU usage"
echo -e "\nProcessus consommant le plus de CPU :"
top -l 1 -s 0 | head -20 | tail -10
echo -e "\nMoyenne de charge :"
uptime
Afficher l'état de la mémoire
Informations basiques de la mémoire
#!/bin/bash
# Afficher l'utilisation de la mémoire
top -l 1 -s 0 | grep PhysMem
echo "État de la mémoire récupéré avec succès"
Analyse complète de la mémoire
#!/bin/bash
# Rapport détaillé de la mémoire
echo "=== Analyse de l'état de la mémoire ==="
echo "Utilisation de la mémoire physique :"
top -l 1 -s 0 | grep PhysMem
echo -e "\nStatistiques de la mémoire virtuelle :"
vm_stat
echo -e "\nPression mémoire :"
memory_pressure
Lister les processus en cours d'exécution
Voir tous les processus
#!/bin/bash
# Lister tous les processus en cours d'exécution
ps aux
echo "Liste des processus générée avec succès"
Liste limitée de processus
#!/bin/bash
# Afficher les 10 premiers processus
echo "Top 10 des processus en cours :"
ps aux | head -11
# Afficher un nombre spécifique de processus (remplacer 15 par le nombre désiré)
echo -e "\nTop 15 des processus :"
ps aux | head -16
Vues filtrées des processus
#!/bin/bash
# Afficher seulement les processus utilisateur
echo "Processus utilisateur :"
ps aux | grep -v "^root"
echo -e "\nProcessus système :"
ps aux | grep "^root" | head -10
echo -e "\nProcessus utilisant le plus de CPU :"
ps aux --sort=-%cpu | head -10
echo -e "\nProcessus utilisant le plus de mémoire :"
ps aux --sort=-%mem | head -10
Terminaison de processus
Tuer un processus par PID
#!/bin/bash
# Tuer un processus spécifique (remplacer PID par l'ID de processus réel)
PID="1234"
if kill -9 "$PID" 2>/dev/null; then
echo "Processus $PID terminé avec succès"
else
echo "Échec de la terminaison du processus $PID ou processus introuvable"
fi
Tuer un processus par nom
#!/bin/bash
# Tuer un processus par nom d'application
APP_NAME="Safari"
if pkill -f "$APP_NAME"; then
echo "Processus $APP_NAME terminés avec succès"
else
echo "Aucun processus $APP_NAME trouvé ou échec de la terminaison"
fi
Terminaison sécurisée de processus
#!/bin/bash
# Terminer gracieusement un processus avec confirmation
terminate_process() {
local pid="$1"
local process_name
# Obtenir le nom du processus
process_name=$(ps -p "$pid" -o comm= 2>/dev/null)
if [[ -z "$process_name" ]]; then
echo "Processus $pid introuvable"
return 1
fi
echo "Processus trouvé : $process_name (PID: $pid)"
# Essayer d'abord une terminaison gracieuse
if kill -TERM "$pid" 2>/dev/null; then
echo "Signal de terminaison envoyé à $process_name"
sleep 3
# Vérifier si le processus existe encore
if kill -0 "$pid" 2>/dev/null; then
echo "Processus encore actif, forcer la terminaison..."
kill -9 "$pid" 2>/dev/null
fi
echo "Processus $process_name terminé"
return 0
else
echo "Échec de la terminaison du processus $process_name"
return 1
fi
}
# Exemple d'utilisation (remplacer par le PID réel)
# terminate_process 1234
Script de gestion de processus d'entreprise
#!/bin/bash
# Outil de gestion des processus MacFleet
# Surveiller et gérer les processus sur les appareils de la flotte
# Configuration
LOG_FILE="/var/log/macfleet_processes.log"
ALERT_CPU_THRESHOLD=80
ALERT_MEMORY_THRESHOLD=80
# Fonction de journalisation
log_action() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}
# Obtenir les statistiques système
get_system_stats() {
echo "=== Statistiques système ==="
# Utilisation CPU
local cpu_info
cpu_info=$(top -l 1 -s 0 | grep "CPU usage")
echo "CPU : $cpu_info"
# Utilisation mémoire
local mem_info
mem_info=$(top -l 1 -s 0 | grep PhysMem)
echo "Mémoire : $mem_info"
# Moyenne de charge
echo "Charge : $(uptime | awk -F'load average:' '{print $2}')"
# Top processus
echo -e "\nTop 5 des consommateurs CPU :"
ps aux --sort=-%cpu | head -6 | tail -5
echo -e "\nTop 5 des consommateurs mémoire :"
ps aux --sort=-%mem | head -6 | tail -5
}
# Vérifier la santé du système
check_system_health() {
echo "=== Vérification de la santé du système ==="
# Vérifier les processus haute utilisation CPU
local high_cpu_procs
high_cpu_procs=$(ps aux | awk -v threshold="$ALERT_CPU_THRESHOLD" '$3 > threshold {print $2, $11, $3"%"}')
if [[ -n "$high_cpu_procs" ]]; then
echo "⚠️ Processus haute utilisation CPU :"
echo "$high_cpu_procs"
log_action "Alerte CPU élevé : $high_cpu_procs"
fi
# Vérifier les processus haute utilisation mémoire
local high_mem_procs
high_mem_procs=$(ps aux | awk -v threshold="$ALERT_MEMORY_THRESHOLD" '$4 > threshold {print $2, $11, $4"%"}')
if [[ -n "$high_mem_procs" ]]; then
echo "⚠️ Processus haute utilisation mémoire :"
echo "$high_mem_procs"
log_action "Alerte mémoire élevée : $high_mem_procs"
fi
}
# Tuer les processus incontrôlés
kill_runaway_processes() {
echo "=== Détection de processus incontrôlés ==="
# Trouver les processus utilisant un CPU excessif (>90% pendant >5 minutes)
local runaway_pids
runaway_pids=$(ps aux | awk '$3 > 90 {print $2}')
for pid in $runaway_pids; do
local process_name
process_name=$(ps -p "$pid" -o comm= 2>/dev/null)
if [[ -n "$process_name" ]]; then
echo "Processus incontrôlé trouvé : $process_name (PID: $pid)"
# Ignorer les processus système critiques
if [[ "$process_name" =~ ^(kernel|launchd|WindowServer)$ ]]; then
echo "Ignorer le processus système critique : $process_name"
continue
fi
log_action "Terminaison du processus incontrôlé : $process_name (PID: $pid)"
kill -TERM "$pid"
fi
done
}
# Fonction principale de surveillance
main() {
log_action "=== Surveillance des processus MacFleet démarrée ==="
get_system_stats
echo ""
check_system_health
echo ""
# Optionnellement tuer les processus incontrôlés (décommenter pour activer)
# kill_runaway_processes
log_action "=== Surveillance des processus terminée ==="
}
# Exécuter la fonction principale
main "$@"
Détails des informations de processus
Lors de l'utilisation de ps aux
, chaque colonne fournit des informations spécifiques :
Colonne | Description |
---|---|
USER | Utilisateur exécutant le processus (processus système ou utilisateur) |
PID | ID du processus (identifiant unique) |
%CPU | Pourcentage d'utilisation CPU |
%MEM | Pourcentage d'utilisation mémoire |
VSZ | Taille de la mémoire virtuelle en KB |
RSS | Utilisation de la mémoire physique en KB |
TT | Terminal associé au processus |
STAT | État du processus (R=en cours, S=endormi, Z=zombie) |
STARTED | Date/heure de démarrage du processus |
TIME | Temps CPU consommé |
COMMAND | Commande utilisée pour démarrer le processus |
Tâches courantes de gestion de processus
Trouver un processus par nom
# Trouver les processus Safari
ps aux | grep -i safari
# Trouver tous les processus contenant "mail"
ps aux | grep -i mail | grep -v grep
Surveiller un processus en temps réel
# Surveiller un processus spécifique
watch -n 1 'ps aux | grep -i safari'
# Surveiller les ressources système en continu
top -s 1 -n 10
Générer un rapport de processus
#!/bin/bash
# Créer un rapport complet des processus
REPORT_FILE="process_report_$(date +%Y%m%d_%H%M%S).txt"
{
echo "Rapport de processus MacFleet"
echo "Généré : $(date)"
echo "Nom d'hôte : $(hostname)"
echo "=========================="
echo ""
echo "Aperçu système :"
top -l 1 -s 0 | grep -E "(CPU usage|PhysMem)"
echo ""
echo "Top 20 processus :"
ps aux | head -21
echo ""
echo "Nombre de processus par utilisateur :"
ps aux | awk '{print $1}' | sort | uniq -c | sort -nr
} > "$REPORT_FILE"
echo "Rapport de processus sauvegardé dans : $REPORT_FILE"
Notes importantes
- Les ID de processus (PID) changent lorsque les processus redémarrent
- Les processus système nécessitent des privilèges admin pour être terminés
- Force kill (
kill -9
) doit être utilisé en dernier recours - Surveiller l'utilisation des ressources avant de terminer des processus
- Tester les scripts sur des appareils individuels avant le déploiement en flotte