Prise en main des Processus



Rappel : la syntaxe d'une commande peut s'obtenir avec man ou info ou ici en français.


Processus

    Commandes : ps pstreetop,  kill

    Les paramètres de la commande ps peuvent varier d'un système UNIX à l'autre. Sous Linux, utiliser la commande ps pour :

    On peut envoyer un signal à un processus, les signaux les plus utilisés sont INT, TERM et KILL. Tous les signaux sont traités par le processus cible. INT permet en général d'interrompre l'action en cours, TERM de terminer le processus proprement. KILL provoque la terminaison immédiatement du processus (le traitement de ce signal ne peut pas être redéfini).

    Lancer un ou plusieurs processus (par exemple xedit, xclock,..). Envoyer leur des signaux à partir d'un shell avec la commande kill. Les signaux peuvent être interceptés en shell en utilisant trap.
    Par exemple, dans un terminal, entrer la ligne suivante :

trap "echo \"vous avez tapé ^C\"" 2 puis faire ^C

    Gestion de processus : notion de tâche de fond.

    Les shells récents permettent de gérer les processus qu'ils lancent, lorsqu'un processus est en premier-plan (foreground), le shell attend qu'il se termine avant de retourner au prompt. Si le processus est lancé en arrière-plan (background) en rajoutant & après la commande, le shell retourne au prompt immédiatement. Un processus en premier plan peut être stoppé par la touche Ctrl-z.

    Un processus peut donc se retrouver dans un des 3 états : suspendu, arrière-plan ou premier-plan. fg, bg, kill permet de passer en premier plan, en second plan, ou de tuer un processus en passant en argument %nn est le numéro affiché par jobs.

    Les processus en arrière-plan sont listés par la commande jobs

    Que se passe-t-il si on passe un processus utilisant le terminal courant en background ?

    Enchaînement de commandes shell et pipe.


Utilisateurs

    A chaque utilisateur est associé un nom de login, un numéro d'identification : UID, un numéro de groupe : GID, un répertoire de base (HOME) et le shell utilisé ( SHELL).

    w, who, last, talk, tty

    Etudier ce que font les commandes w, who, last et tty. Regarder les différences entre la sortie de w et who lorsqu'on lance xterm -ut & et xterm +ut &.


Variables d'environnement

    Chaque processus possède des variables d'environement. La valeur de ces variables est héritée par les processus fils. Donc en particulier, changer une variable dans un shell ne la modifie pas dans les autres. En shell, les variables d'environnements sont affichables avec la commande set. L'utilisation de ces variables est définie par chaque programme, certaines variables définissent des fonctions précises :

    Sachant que dans une commande shell $var est remplacé par la valeur de la variable var, comment peut-on afficher la valeur d'une variable ?

    Sous les shell du type Bourne shell (bash,ksh,sh), les variables d'environnement se changent avec la syntaxe : PATH=/bin:/usr/bin;export PATH, on peut supprimer une variable avec unset, l'ensemble des variables est affiché avec set.

    Sous les shells du type bourne c-shell (csh et tcsh), les variables d'environnements sont changées avec la syntaxe setenv PATH /usr/bin:/bin, peuvent être supprimées avec unsetenv var.

    Faire un cd, afficher le répertoire courant, changer la variable HOME, faire un cd et réafficher le repertoire courant.

    Que contient le fichier $HOME/.profile ?


Gestion des droits d'accès

    Chaque fichier ou répertoire appartient à un groupe et à un utilisateur donnés; ce dernier lui attribue des droits d'accès.

    rwx, user, group, other

    Les droits d'accès sont divisés en trois parties, une pour le propriétaire, une pour le groupe et une pour les autres. Chaque partie comprenant trois attributs : lecture, écriture et exécution dont la sémantique dépend du type : fichier ou répertoire. Ces attributs sont consultables par la commande ls agrémentée d'options.

    chmod permet de modifier les droits d'accès d'un fichier. Deux syntaxes sont utilisables :

    Faire des essais avec ls dir, touch dir/toto, rm dir/toto, cat dir/toto. Donnez dans une table construite a priori, pour les 8 combinaisons de permissions possibles, et pour chacune des opérations demandées, celles qui seront autorisées (on suppose que toto n'existe pas pour touch et existe avec la permission de lecture pour cat). Ensuite, contrôler expérimentalement vos résultats.

    Quels sont les combinaisons équivalentes dans le cas d'un fichier, d'un répertoire ?

    Peut-on supprimer un fichier accessible en lecture seulement ?

    Les droits d'accès sont souvent representés en octal, chaque chiffre donnant un groupe de droits, et chaque bit de chaque chiffre correspondant en partant du plus fort au bit de lecture, écriture et exécution.

    À quelles permissions correspondent les valeurs classiques 755 et 644 ?

    umask

    Chaque processus possède un umask hérité par ses fils pemettant de définir les droits à exclure des fichiers ou des réperoires créés. Par défaut, les différents logiciels essayent généralement de créer des droits identiques pour le propriétaire, le group et les autres. Le umask spécifie les bits de permission à exclure.

    Dans un shell umask permet d'afficher la valeur courante du umask, umask val de la modifier.

    Essayer de créer des fichier et répertoires avec un umask égal à 022, égal à 000. Quelles sont les différences ?

    sticky bit (o+t), setuid bit (u+s), setgid bit (g+s).

    Le répertoire /tmp a parfois (depend du système) le bit d'attribut sticky representé avec t par la commande ls -l : cela permet d'empêcher un utilisateur de supprimer un fichier ne lui appartenant pas, s'il n'est pas le propriétaire du fichier ou du répertoire.

    Créer un répertoire avec le bit sticky, créer des fichiers sous des utilisateurs différents, essayer de les supprimer.

    Quelles utilisations voyez-vous à cet attribut ?

    Quelle est sa signification pour un programme exécutable ?

    L'attribut setuid sur un exécutable donne au processus exécutant ce programme les droits de son propriétaire. Cela est par exemple utilisé pour le programme passwd qui doit modifier le fichier /etc/passwd, sans pour autant que le fichier /etc/passwd soit accessible par n'importe qui.

    Liens et liens symboliques

    Il est parfois commode de disposer d'un même fichier sous plusieurs noms différents à des endroits éventuellement différents de l'arborescence. On distingue deux possibilités à cet usage :

    Comment peut-on faire l'équivalent d'un déplacement sans utiliser mv ?

    Faire un lien symbolique sur un fichier non-existant. Faire un ls du lien, puis un more du lien. Que se passe t-il ?


Systèmes de fichiers, montages

    Un système de fichiers définit la façon dont sont organisés le stockages des fichiers ( file ) et celui des répertoires ( directory). Pour les manipuler, le système d'exploitation doit connaître à la fois le périphérique (modèle et interface d'accès) et le système de fichier. Ceci sont donnés lors de l'opération de montage (mount). Sous Unix (et Linux), tous les systèmes de fichiers montés sont ratachés à un répertoire dans un arbre dont la racine est notée / ( root file system).

    Les systèmes de fichiers virtuels

    Les types de systèmes de fichiers virtuels que vous avez vus ci-dessus, sont :

    Un petit tour dans /proc

    Celui-ci permet l'accès direct aux informations du systèmes d'exploitation et se content de les mettre en forme pour l'affichage. Par exemple, que trouve-t'on dans :     Retrouvez le répertoire correspondant au processus shell que vous exécutez.


Document créé par Laurent Lefèvre(2000-02-16), modifié par Jacques Bonneville (2002-01-25)(2003-01-31), retouches par Jean Claude Iehl