Il est possible de le faire. On pourrait écrire un script d'enrobage, qui lancera un processus et capturera son PID et surveillera ce PID. Par exemple, j'ai écrit un petit script ci-dessous, qui si appelé comme monitor_process.sh firefox
lancera firefox et attendra jusqu'à ce qu'il se ferme.
#!/bin/bash
nohup $@ &> /dev/null &
PID=$!
while ps --no-headers -p $PID > /dev/null
do
echo $PID
: #pas d'opération
sleep 0.25
done
notify-send "$@" est sorti
Bien sûr, il peut y avoir plusieurs instances de firefox, donc nous voulons avoir quelque chose comme monitor_process.sh firefox
et il surveillera toutes les fenêtres de firefox, jusqu'à ce qu'elles soient toutes fermées.
#!/bin/bash
SELF=$$
while pgrep -f firefox | grep -v $SELF > /dev/null
do
: #pas d'opération
sleep 0.25
done
notify-send "$@" est sorti
La manière dont je l'ai faite ci-dessus est en obtenant les PID de tous les processus contenant la chaîne "firefox", mais en ignorant le PID du script (parce que monitor_process.sh firefox
sera inclus dans la liste, et nous ne voulons pas cela - le script ne se terminera pas s'il se surveille constamment).
Bien sûr, le script se terminera une fois qu'il aura envoyé la notification et pourra être redémarré si vous rouvrez une fenêtre après sa fermeture, il serait donc probablement plus facile d'ajouter également nohup $@ &> /dev/null &
à la deuxième ligne du script et de l'utiliser à la fois comme lanceur et moniteur.
Alternativement, nous pourrions ajouter une boucle while extérieure qui surveillera si firefox est en cours d'exécution, et commencera à surveiller uniquement s'il est en cours d'exécution; sinon, commencez à surveiller.
#!/bin/bash
start_monitoring()
{
while pgrep -f "$@" | grep -v $SELF &> /dev/null
do
: #pas d'opération
sleep 0.25
done
notify-send "$@" est sorti
}
main()
{
local SELF=$$
while true
do
pgrep -f "$@" | grep -v $SELF > /dev/null
[ $? -eq 0 ] && start_monitoring "$@"
sleep 0.25
done
}
main "$@"
Et le code ci-dessus fonctionnera pour plusieurs instances de firefox et plusieurs fermetures et réouvertures, donc vous pouvez fermer firefox pendant la session, il vous en informera, et continuera d'attendre jusqu'à ce qu'un nouveau apparaisse, et commencera à surveiller celui-ci.