Bonjour,
J'ai écrit un script shell qui se présenter sous la forme d'une boucle.
Un programme s’exécute pour chaque fichier à chaque tour de boucle.
Seulement lorsque je fais un top, je vois seulement le processus du programme qui travaille sur les fichiers à chaque tour de boucle.
J'ai beau faire un kill sur ce programme, la boucle shell continue.
Je souhaiterais un moyen de faire un kill directement sur le script shell afin de stopper la boucle.
Je ne parviens pas à l'identifier à l'aide du top.
Merci pour vos conseils
# pkill ?
Posté par Kangs . Évalué à 2.
Je ne suis pas sur de t'avoir bien compris mais regarde
pkill
.[^] # Re: pkill ?
Posté par aurora . Évalué à 2. Dernière modification le 25 juin 2018 à 21:38.
j'ai un script shell de cette forme :
monscript.sh
Quand je fais un top je vois que le fastqc qui tourne donc si je kill ce processus,
mon script shell continue à tourner.
Ce que j'aimerais c'est identifier mon script shell et faire un kill dessus.
Je ne sais pas si je suis claire
[^] # Re: pkill ?
Posté par totof2000 . Évalué à 4.
Plutôt que de faire un top, qui passera son temps à réordonner sa liste en fonction des processus actifs à un instant T, tu devrais utiliser ps et filtrer (grep) sur le nom de ton script shell.
Sinon comme indiqué ailleurs, tu peux aussi utiliser pkill qui se basera sur le nom de ton process plutôt que de se baser sur son PID.
un truc du genre pkill monscript.sh devrait donc faire l'affaire.
[^] # Re: pkill ?
Posté par aurora . Évalué à 2.
Super cela fonctionne, merci infiniment pour ces précieux conseils !
# Code de retour
Posté par pma . Évalué à 1.
Bonsoir,
Si tu tiens vraiment à arrêter le processus père (ton script), lorsque l'un de ses fils (fastqc) ne se termine pas correctement, tu peux tester le code de retour. C'est une valeur entière retournée par un programme lorsqu'il se termine. Dans le shell, si le processus est tué par un signal et qu'il ne se termine donc pas, le code de retour à pour valeur 128 plus le numéro du signal. Donc tu pourrais écrire:
fastqc
[ $? -eq 143 ] && { echo "Fastqc a été tué." ; exit 1 }
Mais comme dit plus haut, il paraît plus logique de tuer le père pour tuer ce dernier, plutôt que tuer le fils pour tuer le père.
# Tuer le père
Posté par ComputingFroggy (site web personnel) . Évalué à 2.
Comme évoqué dans les réponses précédentes, il faut tuer le père du processus que tu vois.
Dans
top
, par défaut, le processus parent n'est pas affiché, il faut afficher la colonnePPID
(appuyer sur la touchef
pour le choix des colonnes).(personnellement, je préfère
htop
, mais c'est une question de goût)Du coup, tu fais un
kill
, non plus avec la valeur de la colonnePID
, mais avec la valeur de la colonnePPID
… aprèspkill
fonctionne aussi très bien ! ;-)Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.