Télécharger - BELKHIR Abdelkader USTHB

publicité
Dpt Informatique
Faculté Electronique et Informatique
USTHB
2ème année Licence GTR
UASE : Utilisation et Administration
des Systèmes d’Exploitation
CHAPITRE 4 : GESTION DES PROCESSUS
4.1 Les processus sous Unix
Unix est un système multi-tâches, c'est-à-dire qu'il peut exécuter plusieurs programmes à la
fois. Un processus est une instance d'un programme en train de s'exécuter, une tâche. Le shell
crée un nouveau processus pour exécuter chaque commande.
4.1.1 Mettre un processus en tâche de fond
Si on lance une commande qui prend beaucoup de temps (comme un calcul, ou une nouvelle
fenêtre), on peut l'interrompre par Control-C. Ceci interrompt (définitivement) la commande.
On peut aussi exécuter une commande en tâche de fond. Le shell rend alors la main avant la
fin de la commande. Pour le faire, on ajoute un & à la fin de la commande ; par exemple :
$ cc -o grosprogramme grosfichier.c &
$ xdvi monrapport.dvi &
Dans le premier exemple, on lance le compilateur cc en parallèle avec le shell; dans le second
exemple, on met le dvi en tâche de fond, ce qui évite d'avoir à le relancer à chaque
modification.
On reprend la main immédiatement, sans attendre la fin de l'exécution de la commande. On
peut donc taper d'autres commandes dans le même terminal, pendant que la précédente
s'exécute.
4.1.2 background et foreground
Comme on vient de le voir, si vous avez pensé à terminer votre ligne de commande par une
esperluette, le programme que vous avez lancé tourne en arrière-plan (background, abrégé en
bg).
Si vous avez omis l'esperluette, le programme prend la précédence sur le shell. On dit qu'il
tourne au premier plan (foreground, abrégé en fg). Les lignes tapées au clavier sont
mémorisées mais ne seront pas exécutées par le shell avant que le programme en cours
d'exécution n'ait fini son calcul. Vous pouvez malgré tout faire passer ce programme en tâche
de fond, grâce à la manipulation suivante :
$ xdvi rapport.dvi
^Z
zsh: suspended xdvi rapport.dvi
$ bg
[1] + continued xdvi rapport.dvi
$
^Z
est un signal intercepté par le shell, qui suspend l'exécution du programme sans détruire le
processus correspondant. Les calculs déjà effectués par ce programme ne sont pas perdus.
Dans l'exemple précédent, si on demande à un xdvi suspendu de changer de page (SPC), il ne
Pr BELKHIR A
Dpt Informatique
2ème année Licence GTR
Faculté Electronique et Informatique
UASE : Utilisation et Administration
USTHB
des Systèmes d’Exploitation
le fera pas, mais il se souviendra de le faire dès qu'il aura à nouveau accès aux ressources de
l'ordinateur. À partir de l'état suspendu, on peut faire passer un programme :


au premier plan, en tapant fg ;
en arrière-plan, en tapant bg.
Son exécution reprend alors là où on l'avait laissée.
Quand il n'y a qu'un seul programme en arrière-plan dans le terminal courant, on peut le faire
passer au premier plan en tapant fg. Cela permet en particulier d'interrompre son exécution
grâce à ^C, que la plupart des programmes comprennent.^C n'affecte que l'éventuel unique
programme qui tourne au premier plan dans le terminal où il est tapé. Quand il y en a
plusieurs, c'est un peu plus compliqué, mais c'est bien sûr possible.
Résumé :




Le programme tourne au premier plan :
o ^Z le suspend ;
o ^C l'interrompt.
Le programme est suspendu :
o fg le passe au premier plan ;
o bg le passe en arrière-plan.
Le programme tourne en arrière-plan :
o si c'est le seul dans ce cas, fg le passe au premier plan ;
o sinon, c'est plus compliqué.
Le programme ne tourne pas :
o il n'y a rien à faire...
4.2 Voir les processus
Chaque processus est associé un certain nombre d’informations. Ces informations contribuent
à l’identification et la gestion du processus. On dénote :
- numéro de processus PID (Process Identifier)
- numéro d’utilisateur UID (User IDentifier)
- numéro de groupe GID (Group IDentifier)
- durée de traitement utilisée (temps cpu) et priorité du processus
- référence au répertoire de travail courant
- table de référence des fichiers ouverts
-
PID (Process Identifier) : le système étant multi-tâche, le PID est moyen d’identifier tout
processus dans le système. Chaque processus peut créer lui-même des processus ; ces
nouveaux processus sont alors appelés processus fils. Ces derniers connaissent leur
origine par l’intermédiaire de PPID (PID du père)
Pr BELKHIR A
Dpt Informatique
Faculté Electronique et Informatique
USTHB
2ème année Licence GTR
UASE : Utilisation et Administration
des Systèmes d’Exploitation
UID et GID : Chaque processus dispose des numéros UID et GID à sa création. Ce qui lui
permettra d’avoir les autorisations d’accès aux fichiers.
Durée de traitement et priorité : La stratégie de scheduling est une variante de Roud Robbin
basée sur les priorités. Ce qui permettra de partager le temps CPU entre les processus.
Répertoire courant du processus : il indique le répertoire courant de travail et d’accès aux
fichiers.
Table des fichiers ouverts : elle permet l’accès aux fichiers en lecture et écriture. Les trois
premières entrées sont prédéfinies : stdin (clavier), stdout (écran) et stderr (écran pour erreur).
Les priorités des processus créent un phénomène appelé "ordonnancement " lié à la gestion de
la mémoire.
Le temps de processeur total disponible est divisé en petites plages : le quantum. Un
processus ne peut rester dans le processeur que le temps d'un quantum.
La commande ps montre où en sont les tâches de fond :
$ ps
PID TT STAT TIME COMMAND
4450 p9 S 0:00 /usr/local/bin/lcsh
4782 p9 S 0:02 cc -o grosprogramme grosfichier.c
Pr BELKHIR A
Dpt Informatique
Faculté Electronique et Informatique
USTHB
2ème année Licence GTR
UASE : Utilisation et Administration
des Systèmes d’Exploitation
4841 p9 R 0:00 ps
ps
affiche la liste des processus que vous avez lancés :




PID (process identificator) : c'est le numéro du processus.
TT : indique le terminal dans lequel a été lancé le processus.
Un point d'interrogation
signifie que le processus n'est attaché à aucun terminal (par exemple les démons).
STAT : indique l'état du processus :
o R : actif ( running)
o S : non activé depuis moins de 20 secondes (sleeping)
o I : non activé depuis plus de 20 secondes (idle)
o T : arrêté (suspendu)
o Z : zombie
TIME : indique le temps machine utilisé par le programme (et non pas le temps depuis
lequel le processus a été lancé !).
La commande ps a différentes options, dont les suivantes :





a
(all) : donne la liste de tous les processus, y compris ceux dont vous n'êtes pas
propriétaire.
g (global, général...) : donne la liste de tous les processus dont vous êtes propriétaire.
u (user, utilisateur) : donne davantage d'informations (nom du propriétaire, heure de
lancement, pourcentage de mémoire occupée par le processus, etc.).
x : affiche aussi les processus qui ne sont pas associés à un terminal.
w : le tronque pas à 80 caractères (peut être utilisée plusieurs fois pour tronquer plus
loin)
ps agux est
en fait souvent utilisé pour avoir des informations sur tous les processus.
La commande top affiche les mêmes informations, mais de façon dynamique : elle indique en
fait par ordre décroissant le temps machine des processus, les plus gourmands en premier.
4.3 Tuer les processus
Les programmes ont tous une commande spécifique pour les quitter ( q, menu où cliquer, etc).
C'est seulement dans le cas où vous ne parvenez pas à les quitter correctement, pour une
raison ou une autre, que vous pouvez avoir besoin de tuer le processus.
Avant toute chose, essayez de taper ^C ou ^D. Si cependant ça ne marche pas, utilisez la
commande kill (plus le numéro du processus).
$ ps
PID TT STAT TIME COMMAND
4450 p9 S 0:00 /usr/local/bin/lcsh
4782 p9 S 0:02 cc -o grosprogramme grosfichier.c
4841 p9 R 0:00 ps
$ kill 4782
$ ps
PID TT STAT TIME COMMAND
4450 p9 S 0:00 /usr/local/bin/lcsh
4851 p9 R 0:00 ps
Pr BELKHIR A
Dpt Informatique
2ème année Licence GTR
Faculté Electronique et Informatique
UASE : Utilisation et Administration
USTHB
des Systèmes d’Exploitation
kill -9 tue le processus à tous les coups. Vous ne pouvez tuer que les processus dont vous
êtes propriétaire. Il convient de ne l'utiliser que si aucune autre méthode ne marche, car dans
ce cas le programme n'a aucun moyen de faire quoi que ce soit avant de mourir.
. Commandes liées aux processus
fork :




allocation d'une entrée dans la table de processus.
duplication de la zone u.
portage du code et des données.
copy on write (lorsqu'une modification intervient, il y a copie du processus).
exec :


on libère tout sauf l'entrée dans la table des processus et la zone u.
allocation des zones texte, données, pile et tas pour le programme chargé.
exit :


on libère tout sauf l'entrée dans la table des processus (processus en état zombie).
exit (n) retourne un code de sortie (n) qui pourra être récupéré par le père.
wait :




attente de terminaison du fils, s'il n'est pas encore terminé.
récupération des informations sur la terminaison du fils (code de sortie).
disparition définitive du fils.
6.3.2. top
top est un programme tout en un : il remplit à la fois les fonctions de ps et kill. C’est un
programme en mode console, vous le lancerez donc depuis un terminal.
Pr BELKHIR A
Dpt Informatique
Faculté Electronique et Informatique
USTHB
2ème année Licence GTR
UASE : Utilisation et Administration
des Systèmes d’Exploitation
Figure 6-1. Exemple d’exécution de top
Le programme se contrôle entièrement au clavier. Une aide est disponible en tapant sur h,
mais elle est en anglais. Voici donc quelques-unes des commandes disponibles :
• k : sert à envoyer un signal à un processus. top vous demandera alors le PID du processus
suivi du numéro du signal à envoyer (15 par défaut) ;
• M: trie par taux d’occupation mémoire (champ %MEM)
• P : sert à trier les processus selon le temps CPU qu’ils consomment (champ %CPU : c’est le
tri par défaut) ;
• u : cette commande sert à afficher les processus d’un utilisateur donné, top vous demandera
lequel. Vous devez entrer le nom de l’utilisateur, pas son UID. Si vous n’entrez aucun nom,
tous les processus seront affichés ;
• i : cette commande fonctionne en tant que bascule. Par défaut, tous les processus, même
endormis, sont affichés. Cette commande fera que seuls les processus en cours d’exécution
seront affichés (processus dont le champ STAT indique R, running, soit en cours d’exécution)
mais pas les autres. Un nouvel appel à cette commande permettra de revenir à l’état antérieur.


La commande top affiche une page d'information, périodiquement mise à jour (taper q
pour quitter), pour gérer les processus et être informé de la charge de travail du CPU et
de l'utilisation mémoire.
L'équivalent graphique existe sous X-KDE, lancer K/système/gestionnaire de
taches Ktop
Crontab : planification des tâches

Fonctionnement et syntaxe
Crond est un service qui exécute toutes tâches (commandes et scripts) pour les utilisateurs.
(cron vient de chronos). Il est possible de planifier ces tâches à l'avance et même de les
faire lancer périodiquement. On peut obtenir l'émission de messages de compte-rendu de
ces tâches.
Pr BELKHIR A
Dpt Informatique
2ème année Licence GTR
Faculté Electronique et Informatique
UASE : Utilisation et Administration
USTHB
des Systèmes d’Exploitation
La commande /usr/bin/crontab permet cette programmation. Son usage est en principe
réservé à root. On peut toutefois autoriser certains utilisateurs. Pour cela on en dresse la
liste sur des lignes successives dans le fichier /etc/crond.allow , de façon symétrique,
on peut mettre dans /etc/crond.deny la liste des utilisateurs non autorisés.
o
o
o
o
Exemple : seuls jean et toto ont la permission d'utiliser le service crontab
# ll cron.allow
Jean
toto

Fonctionnement
o Le
processus
crond
est
normalement
lancé
au
démarrage.
On peut le lancer ou l'arrêter avec /etc/rc.d/init.d/crond
o Il lit toutes les minutes les fichiers présents dans le répertoire /var/spool/cron
(et aussi le fichier /etc/crontab, pour voir si des tâches doivent être exécutées.
o Chaque action de crond ajoute une ligne de message dans le fichier
/var/log/cron, qu'il faut purger de temps en temps ... par une commande
crontab !
o Par défaut si une commande produit un affichage, il est dirigé vers la
messagerie

Commande crontab [-u user] {-l | -r | -e }
Modifier le fichier /etc/crontab
Options :
o
o
o
crontab -l affiche le fichier crontab de l'utilisateur
crontab -r efface ce fichier
crontab -l -u jean root examine le fichier crontab
crontab -e
dans vi

de l'user jean
crée ou édite (pour modification) un fichier temporaire dans /tmp ouvert
Syntaxe des lignes des tables crontab
Chaque ligne du fichier contient 6 champs, les 5 premières déterminent les moments
d'exécution de la tâche décrite au 6ème champ.
o
o
les 5 premiers, séparés par des espaces, appelés champs temporels, décrivent la
périodicité
:
minutes (0-59), heures (0-23), jour du mois (1-31), mois de l'année (1-12), jour
de la semaine (0-6, 0= dimanche)
le 6ème est la commande à exécuter, ce peut être naturellement un script
quelconque
Pr BELKHIR A
Dpt Informatique
2ème année Licence GTR
Faculté Electronique et Informatique
UASE : Utilisation et Administration
USTHB
des Systèmes d’Exploitation
o un champ temporel peut contenir :
 une valeur précise et valide pour le champ (par exemple 15 sur le
champ minute)
 une liste de valeurs valides, séparées par des virgules (1,3,5 dans le
champ mois : janvier, mars, mai)
 un intervalle valide (1-5 dans le champ jour : du lundi au vendredi)
 * pour signifier toutes les valeurs possibles du champ (* dans le champ
minute : toutes les minutes)
 */5 (dans le champ minutes : tous les 5 minutes), 0-23/3 (dans le champ
heures : toutes les 3 heures)
 Exemples






















# exécution chaque 1er et 15 de chaque mois à minuit
0 0 1,15 * * commande
# provoquer un reboot la machine chaque 1er et 15 du mois à 2h 30
du matin
30 2 1,15 * * /sbin/shutdown -r
# appeler un script de sauvegarde tous les lundis a 3 h 15 du matin
15 3 * * 1 /usr/bin/backup
# exécution toutes les heures passées 15 minutes
15 * * * * commande
# exécution tous les matins du lundi au vendredi à 7 h 30
30 7 * * 1-5 commande
#
exécution tous les quarts d'heure de 15h à 19h du lundi au
vendredi
# seulement en 1ère quinzaine du troisième trimestre
0,15,30,45 15-19 1-15 7-9 1-5 commande
# trouver puis nettoyer le répertoire /tmp des vieux fichiers (non
modifiés
# depuis 31 jours) tous les 1er jour de chaque mois, à 2 heures du
matin
0 2 1 * * find /tmp -atime 31 -exec rm -f {} \;
at
La commande at permet de lancer une commande un jour donné, à une heure donnée. Une
fois que cette commande a été exécutée, elle n'existe plus. Pour utiliser la commande at taper
at puis l'heure. Ainsi at 12:30 déclenchera la commande à 12 heures 30.
La syntaxe des entrées est la suivante :
at 12:30 11/30/00 : déclenchera la commande le 30 novembre 2000 (le jour étant indiqué sous
la forme mm/jj/aa.
at now + 1 hour déclenchera la commande dans 1 heure à partir de maintenant.
at 00:00 + 2 days pour exécuter la commande dans 2 jours à minuit.
Pr BELKHIR A
Dpt Informatique
Faculté Electronique et Informatique
USTHB
2ème année Licence GTR
UASE : Utilisation et Administration
des Systèmes d’Exploitation
Jusque là nous n'avons entré aucune commande à exécuter. Lorsque vous tapez la commande
at 12:30, vous obtenez l'invite de la commande at at 12:30
$ at 12:30
at>ping -c 1 192.168.0.1
at> ^D
$
vous avez alors le message suivant, qui vous indique que votre demande a été prise en
compte, avec numéro d'ordre le 1.
job 1 at 2000-11-10 12:30
La commande va envoyer un ping sur la machine 192.168.0.1 à 12 heures 30. On peut bien
sur faire exécuter un script. Puis at envoie par mail le résultat de cette commande.
Si vous souhaitez voir ce qui va se passer taper at -c 1 (1 étant le numéro d'ordre).
Si vous ne connaissez plus toutes les commandes en attente tapez at -l (ou atq).
Pour supprimer une commande en attente atrm 1 (pour supprimer le job 1).
Attention un des grands risques lorsque l'on utilise at est de ne pas vérifier l'heure et le jour de
l'exécution de la commande.
Contrôle
Dans le cas de at ou de crontab, il est possible de définir qui a le droit d'utiliser ces
commandes. Pour cela il existe les fichiers /etc/cron.allow /etc/cron.deny et pour at
/etc/at.allow et /etc/at.deny. Pour interdire par exemple l'utilisation de la commande at
saisissez le nom des utilisateurs dans le fichier at.deny (un par ligne).
Remarques
Il existe des interfaces graphiques pour créer, modifier, enlever des crontab. mais est-ce bien
nécessaire ? Si votre machine n'est pas allumée en permanence, il est alors possible que votre
commande crontab ne puisse s'exécuter. Vous pouvez alors utiliser anacron (qui va vérifier les
crontab non exécutées et les exécuter dès la remise en route de la machine).
2.4.5 Les autres utilisateurs
Nous avons dit qu'Unix était un système multi-utilisateurs, il est intéressant de connaître les
possiblités offertes par le système pour échanger de l'information entre les utilisateurs.
a) Qui suis-je ?
Vous êtes connus du système par votre nom d'utilisateur. Demandez donc lui s'il vous connaît
réellement ?
$ who am i
$ whoami
Ces commandes renvoient à l'utilisateur son nom de login. Déterminer la différence entre les
deux commandes.
b) Les utilisateurs connectés
Il est parfois utile de connaître les utilisateurs qui sont connectés en même temps que vous...
Pour leur adresser un message de bienvenue par exemple !
Unix vous offre la commande who qui fournit simplement les noms et les terminaux de login,
et la commande finger, plus sophistiquée, donnant le nom réel de l'utilisateur.
Pr BELKHIR A
Dpt Informatique
Faculté Electronique et Informatique
USTHB
2ème année Licence GTR
UASE : Utilisation et Administration
des Systèmes d’Exploitation
$ who
$ finger
$ users
Remarque : il existe aussi la commande w qui est un mélange du who et du finger.
c) Envoyer un message en direct
A présent que vous savez quelles sont les personnes connectées sur le système, envoyez leur
donc un petit message !
L'envoi d'un message s'effectue par la commande write suivi du nom de l'utilisateur (nom de
login) et suivi du caractère [Return]. Ensuite rédigez votre message terminé par les touches
[Ctrl] et [d] (^D représente le [Ctrl] [d]).
$ write unix
Bonjour unix, je suis un ami.
^D
$
$ write u1
Bonjour u1
Je suis unix
^D
$
A certain moment, vous ne désirez pas être ennuyé par ces messages qui arrivent
intempestivement. Utilisez la commande mesg pour autoriser ou interdire la réception de
messages. Cette commande exécute un chmod sur le fichier périphérique associé à notre
terminal (on peut le vérifier en exécutant un ls -l sur le terminal placé dans le répertoire /dev).
$ mesg y
Autorise la réception de messages. Votre terminal est accessible.
$ mesg n
Interdit l'accès de votre terminal aux autres utilisateurs. Les tentatives d'envoi de messages
sont vouées à l'échec.
"write : permission denied "
$ mesg
Affiche l'état de votre terminal. Accessible ou non.
La commande finger spécifie les utilisateurs se trouvant en mesg n en placant une étoile
devant le terminal.
Remarque : il existe une commande plus facile d'utilisation : talk. Celle-ci découpe l'écran
en deux zones : une zone dans laquelle vous tapez vos messages, une autre où vous recevez
les messages de votre correspondant. Il faut pour cela ouvrir une session interactive (les deux
utilisateurs tous les deux en talk).
2.5 Le courrier
write permet d'envoyer un message à un utilisateur à condition que celui-ci soit connecté.
Ceci est gênant lorsque la personne à qui l'on veut écrire est absente.
Unix a prévu un système de boîte aux lettres pour remédier à ce petit inconvénient. C'est le
mail.
Pr BELKHIR A
Dpt Informatique
2ème année Licence GTR
Faculté Electronique et Informatique
UASE : Utilisation et Administration
USTHB
des Systèmes d’Exploitation
mail fonctionne comme le write excepté que la personne n'est prévenue que lors du prochain
login par le message :
You have mail.
Pour envoyer un courrier.
$ mail unix
Tu es absent, mais je t'envoie un courrier.
^D
EOT
mail send to unix
$
Le texte est envoyé de la même manière que pour write. Sur la fin du message, le système
confirme l'envoi du courrier.
Pour lire son courrier. Le courrier reçu n'est jamais détruit, c'est à l'utilisateur de nettoyer son
courrier selon l'importance des messages.
$ mail
Permet d'accéder au courrier.
Le message No mail s'affiche si l'utilisateur n'a aucun courrier. Dans le cas contraire, il pourra
entrer :
p pour lire le message courant.
s suivi d'un nom de fichier pour enregistrer le message dans le fichier.
Si aucun nom n'est spécifié, le fichier par défaut est le fichier mbox.
d pour détruire le message lu.
+ pour passer au message suivant.
x pour sortir de la messagerie en abandonnant les modifications.
q pour sortir en conservant les modifications.
Pr BELKHIR A
Téléchargement