Options avancées de terminaison de processus
Dans cette étape, nous allons explorer quelques options avancées de la commande pkill qui permettent une gestion des processus plus sophistiquée.
Utilisation de Différents Types de Signaux
Par défaut, pkill envoie le signal SIGTERM (signal 15) aux processus. Ce signal permet aux processus de se terminer proprement, en fermant les fichiers et en effectuant les opérations de nettoyage. Cependant, il existe des cas où vous pourriez vouloir utiliser un signal différent.
Créons un script qui gère les signaux :
cd ~/project
nano signal_handler.sh
Ajoutez le contenu suivant au script :
#!/bin/bash
trap 'echo "Received SIGHUP (1)"; exit 0' SIGHUP
trap 'echo "Received SIGINT (2)"; exit 0' SIGINT
trap 'echo "Received SIGTERM (15)"; exit 0' SIGTERM
echo "Process started with PID $$"
echo "Use: pkill -[signal] -f signal_handler.sh to send signals"
while true; do
sleep 1
done
Rendez le script exécutable :
chmod +x ~/project/signal_handler.sh
Exécutez le script en arrière-plan :
~/project/signal_handler.sh &
Maintenant, essayons d'envoyer différents signaux au processus :
- Envoyez un signal SIGHUP (signal 1) :
pkill -HUP -f signal_handler.sh
- Relancez le script et envoyez SIGINT (signal 2) :
~/project/signal_handler.sh &
pkill -INT -f signal_handler.sh
- Relancez le script et envoyez le SIGTERM par défaut (signal 15) :
~/project/signal_handler.sh &
pkill -f signal_handler.sh ## Default is SIGTERM
Pour chaque signal, vous devriez voir le message correspondant dans la sortie du terminal avant que le processus ne se termine.
Terminer des Processus par Âge
pkill vous permet de cibler des processus en fonction de leur âge en utilisant l'option --newest, qui sélectionne les processus démarrés le plus récemment.
Créons quelques processus avec des heures de démarrage différentes :
cd ~/project
nano age_test.sh
Ajoutez le contenu suivant au script :
#!/bin/bash
while true; do
echo "Process running with PID $$"
sleep 5
done
Rendez le script exécutable :
chmod +x ~/project/age_test.sh
Démarrez le premier processus :
~/project/age_test.sh &
Attendez quelques secondes, puis démarrez deux processus supplémentaires :
sleep 5
~/project/age_test.sh &
~/project/age_test.sh &
Maintenant, terminons uniquement les deux processus démarrés le plus récemment en utilisant l'option --newest :
pkill -f --newest 2 age_test.sh
Vérifiez quels processus sont toujours en cours d'exécution :
ps aux | grep age_test.sh
Vous ne devriez voir que le premier processus toujours en cours d'exécution, car il a été démarré avant les deux autres processus.
Terminez le processus restant :
pkill -f age_test.sh
Limiter pkill par Propriétaire du Processus
Vous pouvez également limiter les actions de pkill aux processus appartenant à un utilisateur spécifique. Dans un système multi-utilisateur, ceci est particulièrement utile.
À des fins de démonstration, exécutons quelques processus en tant qu'utilisateur actuel :
~/project/rogue_app.sh &
~/project/rogue_app.sh &
Maintenant, terminons ces processus, mais uniquement ceux appartenant à votre utilisateur actuel :
pkill -f -u $(whoami) rogue_app.sh
L'option -u spécifie le nom d'utilisateur du propriétaire du processus. La substitution de commande $(whoami) récupère votre nom d'utilisateur actuel.
Vérifiez que tous les processus ont été terminés :
ps aux | grep rogue_app.sh
Vous ne devriez voir que la commande grep elle-même dans la sortie.
Cette capacité à cibler des processus par propriétaire est particulièrement utile dans les environnements multi-utilisateurs où vous souhaitez éviter d'affecter les processus appartenant à d'autres utilisateurs.