J'utilise souvent bashdes scripts shell pour exécuter des commandes simples pour de nombreux fichiers différents. Par exemple, supposons que j'ai le suivant bashscript shell, appelé script.sh, qui exécute le programme / commande foosur 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 nohuppour 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 foocorrespondant à "a.txt". Je peux mettre fin à cet fooappel, mais le foocorrespondant à "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 forboucle, 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ù myusernameest 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
nohupaura 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 pssortie mais les réponses ici sont plus utiles.