J'utilise souvent bash
des scripts shell pour exécuter des commandes simples pour de nombreux fichiers différents. Par exemple, supposons que j'ai le suivant bash
script shell, appelé script.sh
, qui exécute le programme / commande foo
sur trois fichiers texte "a.txt"
, "b.txt"
, "c.txt"
:
#!/bin/bash
for strname in "a" "b" "c"
do
foo $strname".txt"
done
Supposons également que cela foo $strname".txt"
soit lent, de sorte que l'exécution du script prendra beaucoup de temps (heures ou jours, par exemple). Pour cette raison, je voudrais utiliser nohup
pour que l'exécution continue même si le terminal est fermé ou déconnecté. J'aimerais également que le script passe immédiatement en arrière-plan, je vais donc utiliser l' &
opérateur. J'utiliserai donc la commande suivante pour appeler script.sh
:
nohup bash script.sh &
Cela fonctionne très bien pour exécuter le script en arrière-plan et sans raccrocher, mais supposons maintenant que je souhaite terminer l'exécution à un moment donné pour une raison quelconque. Comment puis-je faire ceci?
Le problème que j'ai rencontré est qu'en regardant top
, je ne vois que le foo
correspondant à "a.txt"
. Je peux mettre fin à cet foo
appel, mais le foo
correspondant à "b.txt"
est appelé et je dois également terminer celui-ci, etc. Pour des dizaines ou des centaines de fichiers texte spécifiés dans la for
boucle, il devient difficile de terminer chaque foo
, un par un! Donc, d'une manière ou d'une autre, j'ai besoin de mettre fin au script shell lui - même , pas aux appels particuliers émis à partir du script shell.
Quand je tape la commande
ps -u myusername
où myusername
est mon nom d'utilisateur, j'obtiens une liste des processus que j'exécute. Mais je vois deux ID de processus différents appelés bash
. Comment savoir lequel de ces processus, le cas échéant, correspond à mon appel d'origine nohup bash script.sh &
?
for s in a b c; do foo "$s".txt; done
nohup
aura longtemps que vous n'aurez plus de liste de processus pour voir le travail que vous avez commencé. Vous pouvez regarder la colonne "gentillesse" dans la ps
sortie mais les réponses ici sont plus utiles.