Options avancées de terminaison de processus
Dans cette étape, nous allons explorer certaines options avancées de la commande pkill
qui permettent une gestion plus sophistiquée des processus.
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 des opérations de nettoyage. Cependant, il peut y avoir des cas où vous voudrez utiliser un autre signal.
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
- Redémarrez le script et envoyez SIGINT (signal 2) :
~/project/signal_handler.sh &
pkill -INT -f signal_handler.sh
- Redémarrez le script et envoyez le signal 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.
Terminaison de processus en fonction de leur âge
pkill
vous permet de cibler les processus en fonction de leur âge en utilisant les options --newer
et --older
.
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 et enregistrez le fichier de référence :
~/project/age_test.sh &
touch ~/project/reference_time
Attendez quelques secondes, puis démarrez deux autres processus :
sleep 5
~/project/age_test.sh &
~/project/age_test.sh &
Maintenant, terminons uniquement les processus qui ont été démarrés après la création du fichier de référence :
pkill -f --newer ~/project/reference_time age_test.sh
Vérifions quels processus sont toujours en cours d'exécution :
ps aux | grep age_test.sh
Vous devriez voir que seul le premier processus est toujours en cours d'exécution, car il a été démarré avant la création du fichier de référence.
Terminez le processus restant :
pkill -f age_test.sh
Limitation de pkill par propriétaire de processus
Vous pouvez également limiter les actions de pkill
aux processus appartenant à un utilisateur spécifique. Dans un système multi - utilisateur, cela 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 seulement 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 devriez voir seulement la commande grep
elle - même dans la sortie.
Cette capacité à cibler les processus par propriétaire est particulièrement utile dans les environnements multi - utilisateurs où vous voulez éviter d'affecter les processus appartenant à d'autres utilisateurs.