Chapitre 4
Chapitre 4
Chapitre 4
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.
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 :
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.
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 :
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é :
- 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 2ème année Licence GTR
Faculté Electronique et Informatique UASE : Utilisation et Administration
USTHB 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.
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.
$ 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 2ème année Licence GTR
Faculté Electronique et Informatique UASE : Utilisation et Administration
USTHB des Systèmes d’Exploitation
4841 p9 R 0:00 ps
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.
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.
exec :
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 :
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 2ème année Licence GTR
Faculté Electronique et Informatique UASE : Utilisation et Administration
USTHB des Systèmes d’Exploitation
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
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.
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
Options :
crontab -e crée ou édite (pour modification) un fichier temporaire dans /tmp ouvert
dans vi
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 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)
o 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.
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
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).
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.
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
$ who
$ finger
$ users
$ 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.
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 :
$ 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