Pages

dimanche 26 janvier 2014

Exercices corrigés Linux : Gestion des processus

Exercice 1:

Écrivez un shell script qui cherche dans votre arborescence personnelle tous les fichiers
de noms core, *.tmp, a.out qui n’ont pas été accédés depuis plus de 3 jours, les
supprime et vous envoie la liste par mail. Ce script sera exécuté tous les jours à trois
heures du matin, sauf les samedi et dimanche.

Correction exercice 1 :

Dans cet exemple l’utilisateur a pour login : xavier. Le fichier (script)
/home/xavier/bin/menage contient :
#!/bin/bash
# la commande xargs cmd construit une commande
# en combinant cmd et les parametres qu'elle
# lit sur son entree standard (voir man xargs)
# exemple :
# echo a b c d | xargs rm
# devient la ligne de commande
# rm a b c d
cd /home/xavier
TMP /tmp/menage.$$
rm f $TMP
find . type f name core atime +2 print >$TMP
find . type f name '*.tmp' atime +2 print >>$TMP
find . type f name 'a.out' atime +2 print >>$TMP
if [ s $TMP ] ; then
xargs rm <$TMP
mail s "fichiers effaces" xavier <$TMP
fi
rm f $TMP

Ce script est lancé en cron par la commande crontab e permettant d’écrire
dans la crontab l’entrée suivante :
# mn h jourdumois mois jourdelasemaine commande
0 3 * * 1,2,3,4,5 /home/xavier/bin/menage >/dev/null
Remarquez que la sortie erreur standard n’a pas été redirigée. Les messages
d’erreur, s’il y en a, seront envoyés à l’utilisateur par mail.

Exercice 2:

Écrivez le shell script killprog qui permet d’envoyer le signal SIGKILL à un
processus désigné non pas par son PID mais par son nom : killprog bash. Il
faudra prendre garde au fait que plusieurs processus différents peuvent porter le
même nom, en présenter clairement la liste, et toujours demander confirmation avant
d’envoyer le signal.

Correction exercice 2 :

Le shell script /home/xavier/bin/killprog contient :
#!/bin/bash
MOI $(basename $0) # le nom du script
TEMPO /tmp/$MOI.$$ # un nom de fichier temporaire
CLAVIER $(tty) # mon tty, servira plus tard
if [ $# ! 1 ] ; then # un argument obligatoire
ps fu $(id u) # sinon, lister les process
echo e "\nUsage : $MOI nom du process a tuer"
 exit 2 # et sortir en erreur
fi
if ps fC $1 >$TEMPO # liste des process candidats
then # si au moins 1 de ce nom
cat $TEMPO # montrer les candidats
awk 'NR>1' $TEMPO | while read MONUID PROCESSID RESTE
do # demander confirmation pour chacun
echo n "KILL KILL $PROCESSID ? : "
read REPONSE <$CLAVIER # ne PAS lire STDIN (pipe)
if [ $REPONSE 'oui' ] ; then
if kill KILL $PROCESSID ; then
echo $PROCESSID killed # il est bien mort !
fi
fi
done
else
echo aucun process ne porte le nom $1
rm f $TEMPO
exit 1
fi
rm f $TEMPO


Aucun commentaire:

Enregistrer un commentaire

Partenaires

Computers Blogs

Contactez-nous

Nom

E-mail *

Message *

Tous droits resérvés-www.exercices-corriges.com Seo Blogger Templates