BASH : Terminer un script lançant une tâche persistante Le sujet est résolu

Tout ce qui concerne la programmation.
Répondre
Avatar du membre
dezix
Modérateur
Modérateur
Messages : 1937
Enregistré le : 04 juin 2016, 14:50
Status : Hors ligne

Bonjour, :006:

J'utilise le script suivant :

Code : Tout sélectionner

cat fire_in_jail_kdocker.sh

#!/bin/bash
# 
# Script: fire_in_jail_kdocker.sh 
# Auteur: dezix 
# Date: 2020-12-08
# Version : 0.1
#
# Fonction: Lancer Firefox avec FireJail  et docker avec KDocker
# 
# Note: Fournit une icone à KDocker
#
# Usage => Lanceur Pannel XFCE
#
# Lancer Firefox dans un bac à sable (isolation)
firejail firefox-esr https://duckduckgo.com & sleep 7 ;
# attendre (7s) pour laisser le temps à firefox d'ouvrir sa fenêtre
#
# récupération de l'id de la fenêtre
w_id=$(wmctrl -l | egrep -i firefox | cut -b -10) ;
#
# placer la fenêtre (réduite) dans la zone de notification de l'environnement de bureau (xfce-panel)
kdocker -q -w "$w_id" -i /home/dezix/.local/share/icons/HighContrast/scalable/apps-extra/firefox-jail.svg ;
exit

En cours d'exécution de Firefox,
je me rends compte du fait suivant :

Code : Tout sélectionner

$ for pid in $(pgrep fire); do ps -p "$pid" -o comm= ; done
fire_in_jail_kd
firejail
firefox-esr
C'est à dire que le processus du script fire_in_jail_kd reste actif tant que Firefox n'est pas fermé.

Note : je ne sais pas pourquoi ps tronque la commande — ce qui peut être très gênant dans un script.


Voyant cela,
j'ai pensé que lancer firefox dans sa propre instance de bash :

Code : Tout sélectionner

#!/bin/bash
bash -c 'firejail firefox-esr https://duckduckgo.com' & sleep 7 ;
w_id=$(wmctrl -l | egrep -i firefox | cut -b -10) ;
kdocker -q -w "$w_id" -i /home/dezix/.local/share/icons/HighContrast/scalable/apps-extra/firefox-jail.svg ;
exit
allait changer les choses, mais il n'en est rien.


Alors je pose la question :

Quid de ma commande exit ?



Merci pour vos explications.
Debian stable - XFCE
Avatar du membre
piratebab
Site Admin
Site Admin
Messages : 3880
Enregistré le : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors ligne

si je comprends bien cette commande:
firejail firefox-esr https://duckduckgo.com & sleep 7
tu lances firjail en le détachant du bash (avec le &)
Ton exit te ferme la bash mais pas le programme.
il faut un kill
Avatar du membre
dezix
Modérateur
Modérateur
Messages : 1937
Enregistré le : 04 juin 2016, 14:50
Status : Hors ligne

piratebab a écrit : 09 mai 2022, 16:02 il faut un kill

Merci, :good:

Je n'ai pas pigé directement comment un script pouvait se "suicider" :mega_shok: ..... :059:
donc la réponse est : pkill "$0"

[Édité] En fait, ça ne fonctionne pas (ou pas à tous les coups)


ce qui dans mon petit script donne :

Code : Tout sélectionner

#!/bin/bash
firejail firefox-esr https://duckduckgo.com & sleep 7 ;
w_id=$(wmctrl -l | egrep -i firefox | cut -b -10) ;
kdocker -q -w "$w_id" -i /home/dezix/.local/share/icons/HighContrast/scalable/apps-extra/firefox-jail.svg ;
pkill "$0" ;
exit

Résolu ! [Édité]

:006:
Debian stable - XFCE
Avatar du membre
dezix
Modérateur
Modérateur
Messages : 1937
Enregistré le : 04 juin 2016, 14:50
Status : Hors ligne

Une fois de plus j'ai du aller un peu trop vite en besogne ... :blush:

car je me suis rendu compte que la solution :

pkill "${0}"

ne fonctionne pas (à tous les coups ... ou j'avais mal fait mes tests :017: )


Cette commande devrait fonctionner correctement :

kill -9 "$(lsof | grep ${0} | cut -d ' ' -f 2)"


Si vous avez mieux, j(e) (ap)prends :rofl:
Debian stable - XFCE
Avatar du membre
piratebab
Site Admin
Site Admin
Messages : 3880
Enregistré le : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors ligne

kill -9, c'est l'arme ultime :)
Je m'en servait déjà sur les machines unix (sun) au début de ma carrière :)
Avatar du membre
dezix
Modérateur
Modérateur
Messages : 1937
Enregistré le : 04 juin 2016, 14:50
Status : Hors ligne

Il y a un truc que je ne comprends toujours pas :

À la 1ère exécution du script (après le boot) le processus du script persiste malgré le kill

et si ensuite je le tue manuellement et quitte FF ;

à la seconde exécution, le processus ne survit pas au script.

Il y a donc un détail qui m'échappe,
mais franchement je ne vois pas Quoi ??? :017:
Debian stable - XFCE
Répondre