Dans la situation actuelle, un certain script «calling.sh» lance un autre script «called.sh» en arrière-plan, effectue d'autres opérations, s'endort pendant un certain temps, puis termine «called.sh» par a pkill called.sh
. Cela fonctionne bien.
Ensuite, je voudrais également lancer 'called.sh' à partir d'autres terminaux en tant que script autonome à tout autre moment, que ce soit avant ou après le lancement de calling.sh. Ces instances indépendantes ne doivent pas être supprimées par «calling.sh».
Comment puis-je atteindre cet objectif? L'intuition dit que le script appelant devrait être en mesure de dire au processus qu'il a démarré à partir de tout autre homonyme en cours d'exécution.
En variante, 'calling.sh' peut également lancer 'called' qui est un lien symbolique vers 'called.sh'. Est-ce que cela complique la gestion de la situation ci-dessus? Quelles précautions et ajustements spécifiques l'utilisation d'un lien symbolique nécessite-t-elle?
Réponses:
N'utilisez pas le nom pour le tuer. Puisque le
calling.sh
script appelle le processus que vous souhaitez tuer plus tard, utilisez simplement$!
(deman bash
):Donc, si vous êtes
calling.sh
comme ça:Changez-le en ceci:
la source
$calledPid
PID parent du est le PID decalled.sh
.J'ai dû choisir cela, mais parmi les scripts tant de fois; c'est encore plus amusant lorsque les scripts sont appelés dans le cadre d'un programme automatisé complexe. Vous ne devriez vraiment pas vous fier à quelque chose comme
pkill
pour sélectionner le script à tuer.Dans call.sh, vous devez enregistrer les PID des travaux que vous avez démarrés et les tuer explicitement par PID.
À l'intérieur de calling.sh:
la source