© 2004 - pearson education france · 2004. 8. 30. · 280 utilisation la commande killtue...

27
9 Les processus Objectifs Comprendre la notion de processus et de signaux Apprendre à gérer le multitâche Administrer les processus de sa session Comprendre quelques notions avancées du système Éléments techniques abordés Les commandes ps, kill, nice, renice, fuser, nohup fg, bg, jobs crontab, at stty Les répertoires /var/spool/at, /var/spool/cron /var/spool/cron/atjobs, /var/spool/cron/crontabs Les fichiers /etc/cron.allow, /etc/cron.deny /var/adm/cron/cron.allow, /var/adm/cron/cron.deny /etc/at.allow, /etc/at.deny /var/adm/cron/at.allow, /var/adm/cron/at.deny /etc/inittab, /etc/inetd.conf Le système UNIX est multitâche, c’est-à-dire que chaque utilisateur peut exécuter simultanément plusieurs logiciels. Ces tâches, également appelées processus, corres- pondent à l’ensemble des logiciels actifs dans le système. Apprendre à les administrer, c’est apprendre à gérer l’activité du serveur. © 2004 - Pearson Education France

Upload: others

Post on 02-Sep-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

9Les processus

Objectifs� Comprendre la notion de processus et de signaux� Apprendre à gérer le multitâche� Administrer les processus de sa session� Comprendre quelques notions avancées du système

Éléments techniques abordés

Les commandes� ps, kill, nice, renice, fuser, nohup� fg, bg, jobs� crontab, at� stty

Les répertoires� /var/spool/at, /var/spool/cron� /var/spool/cron/atjobs, /var/spool/cron/crontabs

Les fichiers� /etc/cron.allow, /etc/cron.deny� /var/adm/cron/cron.allow, /var/adm/cron/cron.deny� /etc/at.allow, /etc/at.deny� /var/adm/cron/at.allow, /var/adm/cron/at.deny� /etc/inittab, /etc/inetd.conf

Le système UNIX est multitâche, c’est-à-dire que chaque utilisateur peut exécutersimultanément plusieurs logiciels. Ces tâches, également appelées processus, corres-pondent à l’ensemble des logiciels actifs dans le système. Apprendre à les administrer,c’est apprendre à gérer l’activité du serveur.

© 2004 - Pearson Education France

Page 2: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

276 ◆ Utilisation

9. 1 Principe

Chaque nouvelle commande saisie par un utilisateur s’exécute dans son environne-ment propre, hérité de celui du shell à partir duquel elle a été lancée. Cela s’appliqueà toutes les commandes externes, mais pas aux builtins qui s’exécutent dans l’envi-ronnement du shell même. Cette notion de logiciel autonome en cours d’exécutionest désignée par le terme tâche ou processus. Quand le logiciel est terminé, le processusn’existe plus.

Le système UNIX identifie chaque processus grâce à un numéro unique, son PID(Process IDentification). Chaque processus possède un propriétaire référencé par unUID : il s’agit de l’utilisateur qui a exécuté la commande, sauf dans le cas descommandes possédant un SUID-bit pour lequel le propriétaire du processus est celuide la commande. Chaque processus a également un processus père, référencé par unnuméro PPID (Parent Process IDentification), qui est celui à partir duquel il a étélancé, et dont il est le fils. À son tour, chaque processus fils peut engendrer un autreprocessus dont il sera le père. L’ensemble des processus forment une hiérarchie deprocessus pères et de processus fils.

9. 2 La hiérarchie des processus

Au démarrage du système, le processus init est exécuté, il porte le PID numéro 1.Son rôle est de lancer l’exécution des sous-systèmes, comme les systèmes de fichiers,le réseau, etc. Chaque sous-système va à son tour activer des logiciels qui vont pren-dre en charge des fonctionnalités précises du système UNIX, jusqu’à arriver au shellde l’utilisateur. La figure 9.1 présente cette arborescence de processus.

Les processus tels que imapd ou telnetd sont des services qui s’exécutent en perma-nence et qui répondent à la demande d’un client. Par exemple, à chaque fois qu’unutilisateur se connecte par telnet, le processus telnetd répond au client qui estexécuté sur le poste distant (telnet ou putty), et active un shell pour créer unenouvelle connexion. Cette notion de processus actif en permanence se nomme un« démon » (daemon en anglais). Le nom du démon correspond généralement àcelui du service qu’il rend, et se termine souvent par « d » : on a par exempletelnetd pour le service telnet, ftpd pour le service ftp, httpd pour le service http.Ces services sont généralement gérés par un « super-démon », inetd. Son rôle estde créer un nouveau démon à chaque fois que le précédent est attribué à un client.Ainsi, chaque nouvel accès par telnet génère un nouveau telnetd. L’ensemble desprocessus appartiennent à root, sauf ceux qui découlent des shells créés lors d’uneconnexion. Chaque utilisateur est propriétaire de son shell initial et des autresprocessus dont il est le père.

© 2004 - Pearson Education France

Page 3: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

Les processus ◆ 277

9. 3 La communication interprocessus : les signaux

Les processus peuvent communiquer entre eux. Ils peuvent également être contrôlésdurant leur exécution. La communication entre les processus passe par des signauxqu’ils s’échangent. La réception d’un signal est un évènement non prévisible, un peucomme lorsqu’une personne en train de travailler est subitement interrompue par uncollègue. Toutefois, des actions sont prédéfinies pour chaque signal possible : sansque cela soit programmé, on pourra, par exemple, arrêter un programme avec lacombinaison de touches CTRL+C.

Le tableau 9.1 présente les principaux signaux avec leur numéro. Certains correspon-dent à des combinaisons de touches tapées au clavier.

Figure 9.1 • Arborescence de processus pères et fils.

AttentionUn signal peut avoir un numéro différent selon le système d’exploitation. Ainsi,SIGTSTP porte le numéro 20 sous Linux et le numéro 18 sous AIX. Pour les signaux dontle numéro est dépendant du système, il faut privilégier l’utilisation du nom du signalplutôt que celle du numéro dans les commandes qui le permettent.

Sys

tèm

eU

tilis

ateu

r

1 init

1352 inetd

10323 imapd14214 popper 22107 telnetd

2501 syslogd 2910 nfsd

92123 bash 92504 ksh

21238 telnetd

© 2004 - Pearson Education France

Page 4: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

278 ◆ Utilisation

Tableau 9.1 • Liste des signaux

Nom du signal Numéro(s) Interprétation

SIGHUP 1 Déconnexion du terminal.

SIGINT 2 Interruption depuis le clavier (CTRL+C).

SIGQUIT 3 Demande "Quitter" depuis le clavier (CTRL+\).

SIGILL 4 Instruction illégale.

SIGTRAP 5 Point d’arrêt rencontré.

SIGABRT 6 Signal d’arrêt depuis abort().

SIGEMT 7 Instruction EMT.

SIGFPE 8 Erreur mathématique en virgule flottante.

SIGKILL 9 Signal "KILL".

SIGBUS 10, 7 Erreur de bus.

SIGSEGV 11 Erreur mémoire (violation de segment mémoire).

SIGSYS 12 Appel système avec de mauvais arguments.

SIGPIPE 13 Écriture dans un tube, sans lecteur.

SIGALRM 14 Temporisation de l’alarme écoulée.

SIGTERM 15 Signal de fin.

SIGURG 16, 23, 21 Condition urgente sur communication des sockets.

SIGSTOP 17, 19, 23 Arrêt du processus. Ne peut être inhibé ni ignoré.

SIGTSTP 18, 20, 24 Stop depuis le clavier (CTRL+Z).

SIGCONT 19, 18, 25 Continuer le processus si arrêté. Ne peut être inhibé ni ignoré.

SIGCHLD 20, 17, 18 Processus fils terminé ou arrêté.

SIGTTIN 21, 26 Lecture du terminal en arrière-plan.

SIGTTOU 22, 27 écriture du terminal en arrière-plan.

SIGUSR1 30, 10, 16 Signal utilisateur numéro 1.

SIGUSR2 31, 12, 17 Signal utilisateur numéro 2.

© 2004 - Pearson Education France

Page 5: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

Les processus ◆ 279

Les signaux permettent de contrôler le déroulement d’un processus. On peut parexemple empêcher de l’interrompre en inhibant le signal d’interruption (SIGINT),ou en exécutant une action particulière lors de la réception d’un signal donné. C’estla commande trap, déjà vue au chapitre 8, qui active ou désactive le programme asso-cié au signal. Si une action « vide » est associée, le signal n’a plus aucun effet, ce quil’inhibe. Certains signaux comme SIGKILL ne peuvent être inhibés, ce qui assure quel’on pourra toujours « tuer » un processus. Voici quelques exemples de l’utilisation dela commande trap sous Linux. La première syntaxe affiche la liste des signaux avecleur nom.

• $ trap -l

• 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL

• 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE

• ...

La commande suivante associe la commande echo au signal SIGINT (numéro 2), quicorrespond à la combinaison CTRL+C. Comme l’association est permanente durantla session de travail, chaque utilisation de cette combinaison de touches affiche lemessage argument de la commande echo.

•$ trap 'echo Interruption par CTRL+C' 2

•$ ^C

• Interruption par CTRL+C

La commande suivante associe la commande « vide » au signal SIGINT (numéro 2),ce qui inhibe la combinaison de touches CTRL+C :

•$ trap '' 2

Le programme suivant montre l’effet de la suppression du signal numéro 2(commande ci-dessus). Il utilise une boucle while infinie qui affiche des valeursentières successives. Normalement, la combinaison CTRL+C devrait pouvoir arrêtercette boucle mais cela ne fonctionne plus car le signal numéro 2 est inhibé. Le proces-sus en cours n’est plus interruptible par CTRL+C. Mais il peut toujours êtresuspendu par le signal SIGTSTP émis par la combinaison CTRL+Z.

•$ i=0

•$ while true

•> do

•> i=`expr $i + 1`

•> echo "--- $i ---"

•> sleep 4

•> done

•--- 1 ---

•^C--- 2 --- # CTRL+C n’a plus d’effet.

•--- 3 ---

•^Z # frappe de CTRL+Z

•[1]+ Stopped sleep 2

© 2004 - Pearson Education France

Page 6: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

280 ◆ Utilisation

La commande kill tue définitivement le processus arrêté. La syntaxe %1 correspond àla numérotation du processus dans la liste des processus d’arrière-plan (voir paragra-phe suivant), ce n’est pas le PID du processus.

•$ kill %1

• [1]+ Terminated sleep 2

Enfin, la dernière syntaxe réactive le signal 2 avec un comportement normal. L’asso-ciation des touches CTRL+C est de nouveau possible. La commande composée estécrite sur une seule ligne, les « ; » séparent les instructions élémentaires :

•$ trap 2

•$ while true; do i=`expr $i + 1`; echo "--- $i ---"; sleep 4; done

•--- 4 ---

•--- 5 ---

•^C # Arrêt de la boucle.

•$

9. 4 Gestion des processus interactifs, avant-plan et arrière-plan

Quand un utilisateur exécute une commande interactive, il doit attendre qu’elle soitterminée pour pouvoir en exécuter une autre au niveau d’une même fenêtre de termi-nal. C’est le fonctionnement normal du shell, qui exécute par défaut les tâches en« avant-plan » (foreground). Il est possible d’éviter le blocage de la ligne de comman-des en lançant directement la tâche en « arrière-plan »» (background). Dans ce cas, leprocessus s’exécute sans bloquer l’invite de commande, et l’utilisateur peut saisir unenouvelle commande sans attendre la fin de la première. Le nombre de processus enarrière-plan n’est pas limité, alors qu’il ne peut y avoir qu’un seul processus en avant-plan.

Le lancement d’une ligne de commandes en arrière-plan utilise le signe & à la fin de laligne. Voici un exemple de deux syntaxes qui accomplissent la même action. Lapremière est exécutée en avant-plan, la seconde utilise le signe &, elle est lancée enarrière-plan :

•$ find /tmp –print > trace.tmp

•$ find /tmp –print > trace.tmp &

Au lancement de la première syntaxe, l’utilisateur doit attendre la fin du traitement,qui peut être long. La seconde syntaxe exécute la commande en parallèle et afficheimmédiatement l’invite de saisie. Quelle que soit la syntaxe utilisée, les tâches sontinteractives ; il est donc préférable de ne pas lancer en arrière-plan des commandesqui affichent une information à l’écran, sinon la saisie de nouvelles commandes seraperturbée par le résultat de celles qui se déroulent en parallèle. Dans l’exempleprésenté, l’affichage est redirigé vers un fichier trace.tmp pour éviter l’interférenceavec l’affichage des nouvelles commandes.

© 2004 - Pearson Education France

Page 7: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

Les processus ◆ 281

Il est toujours possible de faire basculer une tâche d’avant en arrière, et vice-versa,avec les commandes fg (pour foreground) et bg (pour background). Pour passer enarrière-plan une tâche lancée en avant-plan, il faut tout d’abord la suspendre sansl’arrêter, avec la combinaison CTRL+Z.

Dans l’exemple suivant, on exécute une commande de recherche des fichiers et des réper-toires « orphelins » (sans propriétaires) dans toute la hiérarchie. La commande est toutd’abord lancée en avant-plan, puis elle est suspendue au bout de quelques secondes :

•$ find / -nouser -print > /tmp/liste.nouser

•^Z

•[1]+ Stopped find / -nouser -print >/tmp/liste.nouser

La commande bg, reprend l’exécution en arrière-plan :

•$ bg

•[1]+ find / -nouser -print >/tmp/liste.nouser &

La commande jobs confirme que la commande continue son exécution :

•$ jobs

•[1]+ Running find / -nouser -print >/tmp/liste.nouser &

La commande fg passe la commande en avant-plan, ce qui rend à nouveau la saisieimpossible. La commande est arrêtée avec CTRL+C.

•$ fg

•find / -nouser -print >/tmp/liste.nouser

•^C

•$

AttentionDans le chapitre précédent, nous avons évoqué la variable d’environnement TMOUT. Ilest important de rappeler qu’une commande en background n’est pas considéréecomme une activité pour le terminal. Si la commande est plus longue que ce qu’auto-rise le time-out, la commande sera arrêtée avant son terme, au moment où le terminalsera stoppé (arrêt du processus associé).

À noterLes commandes fg et bg peuvent être saisies avec, en argument, le numéro du proces-sus à gérer. Cela se justifie dans le cas où plusieurs processus se trouvent en arrière-plan. La syntaxe devient alors :

$ fg %2

$ bg %2

si le numéro 2 correspond à la numérotation fournie par la commande jobs du proces-sus à administrer.

© 2004 - Pearson Education France

Page 8: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

282 ◆ Utilisation

Les combinaisons de touches CTRL+C et CTRL+Z sont associées aux signauxSIGINT et SIGTSTP. La commande stty, avec l’option -a, affiche les signaux decontrôle des processus, associés à des combinaisons de touches, comme intr et susp :

•$ stty -a

•speed 9600 baud; 50 rows; 136 columns;

•eucw 1:1:0:0, scrw 1:1:0:0:

•intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ^@

•eol2 = ^@; start = ^Q; stop = ^S; susp = ^Z; dsusp = ^Y; reprint = ^R

•...

La commande de recherche aurait pu être exécutée directement en arrière-plan avecla syntaxe :

•$ find / -nouser -print > /tmp/liste.nouser &

9. 5 Gestion des processus

Nous avons présenté jusqu’ici la gestion des processus particuliers, à savoir ceux qui sontrattachés à la connexion de l’utilisateur. Cette gestion s’appuie sur des combinaisons detouches particulières telles que CTRL+C et CTRL+Z. Il s’agit d’une méthode de gestionqui ne peut s’appliquer qu’aux processus interactifs, non à l’ensemble des processus.

La gestion de tous les processus actifs, interactifs ou non, s’appuie sur la commandekill. Celle-ci envoie des signaux au processus dont le PID est fourni. Les informa-tions nécessaires à cette commande sont généralement obtenues avec la commandeps. Chaque utilisateur peut administrer ses processus, et l’administrateur root gèretous les processus du système, y compris ceux des utilisateurs. Il pourra, par exemple,déconnecter un utilisateur en « tuant » le processus associé à son login shell, ce quiaura pour effet de terminer également tous les processus fils qui y sont rattachés.

Enfin, les processus peuvent être exécutés en différé, hors connexion. C’est laméthode appliquée couramment pour les traitements comme le nettoyage du réper-toires /tmp ou pour le traitement des statistiques de connexion, qui se déroulent lanuit. Les principales commandes qui préparent le travail différé sont crontab et at.

9.5.1 Les commandesLes principales commandes de gestion des processus sont les suivantes :

ps Affiche les informations sur les processus.

kill Envoie un signal à un ou plusieurs processus.

fuser Gère les processus attachés à un répertoire.

nice et renice Ces deux commandes changent les priorités des processus.

nohup Lance un processus qui ne sera pas « tué » à la déconnexion.

crontab Définit la liste des tâches différées à exécuter régulièrement.

at Permet d’exécuter une commande en différé.

© 2004 - Pearson Education France

Page 9: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

Les processus ◆ 283

9.5.2 Affichage des processus : la commande psLa commande ps affiche les informations sur les processus actifs. Par défaut, elleprésente la liste des processus attachés à la connexion. Voici le résultat de cettecommande quand elle est saisie sans argument sur un système Linux :

•[martin@abricot martin]$ ps

• PID TTY TIME CMD

• 8465 pts/1 00:00:00 bash

• 8512 pts/1 00:00:00 ps

L’interprétation des colonnes affichées est la suivante :

• PID : numéro du processus.

• TTY : numéro de ligne de communication associée au processus.

• TIME : temps total d’exécution du processus.

• CMD : commande associée au processus.

À la commande ps sont associées des options qui permettent d’afficher davantaged’informations. Les principales sont les suivantes :

-l Affiche des informations plus complètes sur les processus. Elle présente descolonnes supplémentaires :

UID : numéro UID de l’utilisateur.

PPID : numéro du processus père.

PRI : niveau de priorité du processus. Plus le nombre est grand, plus la priorité est faible.

NI : valeur de « gentillesse » traitée par la commande nice, qui sert à calculer lapriorité. Une valeur positive indique un accès moindre aux ressources du processeur.

S : état du processus. La lettre « S » indique que le processus « dort » (Sleeping), « R »ou « A » précise qu’il est en exécution (Running sous Linux ou Active sous AIX),« W » indique qu’il est en mémoire de swap (Swapped). Les autres symboles diffèrentselon les systèmes.

-f Affiche des informations un peu moins complètes que l’option -l, mais pluslisibles. L’UID fait apparaître le nom de login à la place du numéro, la colonne CMDindique la syntaxe complète de la commande avec le préfixe « - » pour les login shell,et elle affiche une colonne supplémentaire :

STIME : heure de début du processus.

-a Affiche les processus des autres utilisateurs.

-e Affiche la liste de tous les processus, sauf ceux du noyau.

-u Affiche les informations sur l’utilisateur dont le nom est spécifié. Une liste denoms peut être fournie.

•$ ps -u martin,dupont

© 2004 - Pearson Education France

Page 10: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

284 ◆ Utilisation

-t Affiche les informations sur les processus associés à un terminal. Une liste denoms peut être fournie.

•$ ps -t console,pts/1

-o Permet de sélectionner le format d’affichage dans l’ordre voulu selon une liste demots clés prédéfinis, qui peuvent varier d’un système à l’autre, mais dont lesprincipaux sont :

user : nom de l’utilisateur.

group : nom du groupe de processus (généralement le groupe de l’utilisateur).

uid : numéro de l’utilisateur.

gid : numéro du groupe de processus.

Pid : numéro du processus.

ppid : numéro du processus père.

command : nom de la commande.

tty : nom de la ligne du terminal.

nice : valeur gérée par la commande nice.

Time : temps cumulé du processus.

Les lignes de commandes suivantes montrent le résultat de ces options. La premièrecommande affiche la liste de processus de l’utilisateur connecté, martin, dont l’UIDest 524, avec des informations abondantes pour chaque processus :

•[martin@abricot martin]$ ps -l

•F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

•4 S 524 8465 8464 0 73 0 - 663 wait4 pts/1 00:00:00 bash

•0 R 524 8513 8465 0 77 0 - 915 - pts/1 00:00:00 ps

L’utilisation de l’option -f donne des informations plus lisibles. Le nom de l’utilisa-teur apparaît et la syntaxe -bash précise qu’il s’agit d’un shell de connexion :

•[martin@abricot martin]$ ps -f

•UID PID PPID C STIME TTY TIME CMD

•martin 8465 8464 0 13:35 pts/1 00:00:00 -bash

•martin 8514 8465 0 13:37 pts/1 00:00:00 ps -f

L’option -e affiche tous les processus. Si l’affichage est filtré par la commande grepavec l’argument martin, seuls les processus de martin apparaissent. L’affichagemontre que cet utilisateur est connecté deux fois : la première connexion est unesession bash, la seconde est une connexion ftp à travers le démon proftpd.

•[martin@abricot martin]$ ps -ef|grep martin

•root 8464 8463 0 13:35 ? 00:00:00 login -- martin

•martin 8465 8464 0 13:35 pts/1 00:00:00 -bash

•martin 8511 2002 0 13:36 ? 00:00:00 proftpd: martin - cisco-

•➥ ppp15.crip.univ6.fr: IDLE

© 2004 - Pearson Education France

Page 11: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

Les processus ◆ 285

•martin 8515 8465 0 13:37 pts/1 00:00:00 ps -ef

•martin 8516 8465 0 13:37 pts/1 00:00:00 grep martin

L’option -u affiche tous les processus de martin et confirme la double connexion :

•[martin@abricot martin]$ ps -u martin

• PID TTY TIME CMD

• 8465 pts/1 00:00:00 bash

• 8511 ? 00:00:00 proftpd

• 8517 pts/1 00:00:00 ps

Avec les informations fournies par l’option -f de la commande ps, il est possible deremonter la hiérarchie des processus du login shell de martin jusqu’au processusinitial, init. Pour cela, il faut commencer par le processus père du login shell :

•[martin@abricot martin]$ ps -f

•UID PID PPID C STIME TTY TIME CMD

•martin 8465 8464 0 13:35 pts/1 00:00:00 -bash

•martin 8563 8465 0 13:40 pts/1 00:00:00 ps –f

Le père du processus bash (8465) de martin est le numéro 8464. Il faut ensuite trouverce numéro parmi tous les processus du système :

•[martin@abricot martin]$ ps -ef|grep 8464

•root 8464 8463 0 13:35 ? 00:00:00 login -- martin

•martin 8465 8464 0 13:35 pts/1 00:00:00 -bash

•martin 8565 8465 0 13:40 pts/1 00:00:00 grep 8464

C’est le processus login, dont le PID est 8464 et qui possède comme père le processus8463. La recherche du nom du processus père suit le même raisonnement.

•[martin@abricot martin]$ ps -ef|grep 8463

•root 8463 1533 0 13:35 ? 00:00:00 telnetd -a none

•root 8464 8463 0 13:35 ? 00:00:00 login -- martin

•martin 8567 8465 0 13:41 pts/1 00:00:00 grep 8463

C’est le processus telnetd, dont le PID est 8463 et qui possède comme père le proces-sus 1533. La dernière recherche montre que ce numéro correspond à xinetd, dont lepère est init (processus numéro 1).

•[martin@abricot martin]$ ps -ef |grep 1533

•root 1533 1 0 Mar01 ? 00:00:00 xinetd -stayalive -reuse

•➥ -pidfile /var/run/xinetd.pid

•...

En résumé, l’enchaînement des processus pères et fils qui a abouti à la connexion demartin est le suivant :

init (1) � xinetd (1533) � telnetd (8463) � login (8464) � bash (8465).

© 2004 - Pearson Education France

Page 12: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

286 ◆ Utilisation

Enfin, l’utilisateur peut définir lui-même le format d’affichage de la commande psavec l’option -o. En voici un exemple :

•$ ps -o user,group,uid,gid,pid,ppid,command

•USER GROUP UID GID PID PPID COMMAND

•martin 600 524 600 8465 8464 -bash

•martin 600 524 600 8952 8465 ps -o user,group,uid,gid,pid,ppid,command

9.5.3 Envoi de signaux : la commande killLa commande kill envoie un signal aux processus actifs. Le numéro du signal et le PIDdu processus sont indiqués sur la ligne de commandes. Si aucun numéro de signal n’estprécisé, c’est SIGTERM (15) qui est envoyé. Ce signal tue les processus, sauf ceux quil’interceptent. Pour ces processus, il faut envoyer explicitement le signal SIGKILL (9),qui ne peut être intercepté. L’administrateur root peut arrêter tous les processus avec lacommande kill. Les autres utilisateurs ne peuvent gérer que les processus dont ils sontpropriétaires.

Les différentes syntaxes de cette commande sont :

•$ kill –num_signal pid1 pid2 ...

•$ kill –s num_signal pid1 pid2 ...

•$ kill –l

où num_signal est le numéro ou le nom du signal à envoyer, et pid1, pid2…, sont lesnuméros des processus vers lesquels envoyer le signal. Les PID des processus sontobtenus avec la commande ps. La commande kill avec l’option -l affiche la liste et lenom des signaux qui peuvent être administrés. Elle équivaut à la commande trap -l.La commande suivante envoie le signal numéro 9 (SIGKILL) au processus bash demartin, dont le numéro est 8465 dans l’exemple précédent :

•$ kill –9 8465

Cette commande provoque la déconnexion de martin, ainsi que l’arrêt de tous lesprocessus initiés par son login shell. Seuls martin et root ont les droits suffisants poureffectuer cette action.

C’est le signal 9 qui est le plus employé avec kill car, dans le cadre de la gestion desprocessus, cette commande sert souvent à les arrêter. La gestion interactive (suspen-dre, reprendre, passer en avant-plan) est plutôt réalisée à l’aide des touches de contrô-les, méthode présentée précédemment.

Les différentes valeurs de l’argument PID sont les suivantes :

n Si n est un nombre positif, il indique le PID du processus. La commande suivantetue les processus 2285 et 2076 :

•$ kill -9 2285 2076

© 2004 - Pearson Education France

Page 13: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

Les processus ◆ 287

0 Le signal est envoyé à tous les processus qui appartiennent au même groupe deprocessus que celui de l’émetteur. La commande ci-après tue tous les processus de lasession actuelle et déconnecte l’utilisateur qui la saisit :

•$ kill -kill 0

-1 Le signal est envoyé à tous les processus dont le propriétaire est le même que leprocessus émetteur (ne pas confondre avec le processus 1, init). La commande quisuit tue tous les processus appartenant à l’utilisateur qui saisit cette commande.Toutes ses sessions sont terminées.

•$ kill -kill –1

%n Le signal est envoyé au nième processus de la liste affichée par la commande jobs :

•$ jobs

•[1]- Stopped sleep 5

•[2]+ Stopped sleep 10

•$ kill %2

•[2]+ Terminated sleep 10

Les différentes valeurs de l’argument signal sont :

n Indique un numéro de signal prédéfini.

•$ kill -9 2285

nom Indique le libellé du signal. Ce nom peut avoir la forme SIGKILL, SIGTERM, etc.,ou encore kill, term, etc. Attention, certains systèmes n’acceptent pas les deuxformes.

•$ kill –kill 8465

•$ kill –SIGKILL 8465 # pour Linux

0 Le signal n’est pas envoyé. La commande vérifie seulement l’existence duprocessus.

•$ kill -0 2222

•-bash: kill: (2222) - No such process

Voici un exemple d’utilisation de la commande kill. Deux tâches d’arrière-plansont lancées : une boucle while et une commande find. Dans les deux cas,l’affichage est redirigé vers /dev/null (la poubelle !), de façon à ne conserver àl’écran que le résultat des saisies.

La première commande composée (while) est exécutée en arrière-plan :

•[martin@abricot martin]$ while true

•> do

•> echo "essai">/dev/null

•> done &

•[1] 18044

© 2004 - Pearson Education France

Page 14: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

288 ◆ Utilisation

La seconde commande (find) est ensuite lancée :

•[martin@abricot martin]$ find / -print 2>/dev/null 1>/dev/null &

•[2] 18045

La commande ps affiche la liste de tous les processus. Le second -bash correspond à laboucle while ; il possède le même père (18004) que la commande find. Ce père est leshell de login.

•[martin@abricot martin]$ ps -f

•UID PID PPID C STIME TTY TIME CMD

•martin 18004 18003 0 07:07 pts/1 00:00:00 -bash

•martin 18044 18004 99 07:08 pts/1 00:00:18 -bash

•martin 18045 18004 8 07:08 pts/1 00:00:00 find / -print

•martin 18046 18004 0 07:08 pts/1 00:00:00 ps -f

Les deux processus lancés en tâche de fond sont arrêtés avec la commande kill :

•[martin@abricot martin]$ kill -kill 18045 18044

•[1]- Killed while true; do

• echo "essai" >/dev/null;

•done

•[2]+ Killed find / -print 2>/dev/null >/dev/null

9.5.4 Gestion des processus attachés aux répertoires : la commande fuser

La commande fuser permet d’administrer les processus qui sont attachés à un réper-toire particulier. Les administrateurs y ont recours quand ils souhaitent, par exemple,démonter un système de fichiers (umount), et que l’action est refusée car un processusaccède à ce système. Pour effectuer le démontage, il faut d’abord tuer les processusbloquants, mais rien n’indique quels sont les processus fautifs, sauf la commandefuser, qui trouve tous les processus attachés au système de fichiers.

Par défaut, cette commande affiche les numéros de processus (PID) qui utilisent lesfichiers ou les systèmes de fichiers indiqués en argument. Les options sont très diffé-rentes selon les systèmes UNIX. La plus courante est -k, qui tue les processus. Seulroot peut tuer les processus des autres utilisateurs, mais cette commande est surtoututilisée par l’administrateur.

À noterIl existe une commande, xkill, à taper au niveau du prompt, qui permet d’arrêterl’exécution d’un programme graphique juste en cliquant sur la fenêtre de ce logiciel,sans avoir besoin de récupérer le numéro de processus. Cette commande propose, à laplace du curseur de la souris, une petite cible à placer sur la fenêtre graphique du logi-ciel que l’on veut stopper. Il suffit ensuite de cliquer avec le bouton gauche de la souris.

© 2004 - Pearson Education France

Page 15: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

Les processus ◆ 289

Un suffixe apparaît à la suite du numéro du processus. Il indique le type d’accès duprocessus et peut prendre les valeurs suivantes :

c Accès au répertoire courant.

e Accès à un programme en cours d'exécution.

r Accès au répertoire racine.

m ou s Accès à un fichier en mémoire ou à une bibliothèque partagée.

Voici un exemple qui illustre l’emploi de cette commande sur un système AIX.L’administrateur root veut libérer le répertoire /home/durand de tous les processus quiy sont attachés. La première commande affiche les processus :

•admin(root) $ fuser /home/durand

•/home/durand: 602332c 1110140c 1736922c

Dans cet exemple, tous les processus sont ceux de durand, qui est connecté :

•admin(root) $ ps -aef|grep durand

• durand 602332 1581078 0 17:57:56 pts/0 0:01 -ksh

• durand 1110140 1822840 0 18:02:03 pts/1 0:01 -ksh

• durand 1736922 135278 0 17:54:48 - 0:00 ftpd -l

• root 1847490 1138898 0 18:07:23 pts/2 0:00 grep durand

La commande fuser avec l’option -k arrête tous les processus :

•admin(root) $ fuser -k /home/durand

•/home/durand: 602332c 1110140c 1736922c

9.5.5 Changement des priorités : les commandes nice et renice

La commande nice lance l’exécution d’une commande avec une priorité plus faibleou plus forte. Elle définit une valeur de « gentillesse » initialement positionnée à 0 ou20 selon les systèmes. Plus cette valeur est élevée, plus le processus sera « gentil » vis-à-vis des autres. Chaque utilisateur peut diminuer la priorité de ses processus(augmenter sa gentillesse), mais seul root peut l’augmenter (diminuer la gentillesse).Les différentes syntaxes de cette commande sont :

•$ nice commande

•$ nice -incrément commande

•$ nice -n incrément commande

AttentionLa commande fuser n’est pas rangée dans le même répertoire selon le système UNIX.Elle se trouve dans /sbin sous Linux, et dans /etc sous AIX. L’accès à la commandepeut échouer si la variable PATH ne contient pas ces deux répertoires. Pour résoudre leproblème éventuel, il suffit de taper :

PATH=$PATH:/sbin:/etc

© 2004 - Pearson Education France

Page 16: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

290 ◆ Utilisation

où :

• commande est la ligne de commandes à exécuter. C’est la syntaxe complète avectous ses arguments.

• incrément est l’ajustement de la valeur de gentillesse. Si incrément n’est pas pré-cisé, il est de 10 ; la valeur de gentillesse est augmentée d’autant et la priorité duprocessus est plus faible. Si l’ajustement est négatif (réservé à root), la gentillessedécroît et la priorité augmente.

Voici un exemple d’exécution de la commande nice sous Linux. Elle exécute unscript shell de recherche des fichiers « orphelins ». Celui-ci s’appuie sur lacommande find, qui parcourt le répertoire dont le nom est fourni au script par laligne de commandes.

•[martin@abricot martin]$ cat recherche_nouser

•find $1 -nouser -print 2>/dev/null 1>/tmp/trace.nouser

La commande nice exécute le script avec l’argument /tmp, et un incrément de 15. Lacommande est exécutée en arrière-plan.

•[martin@abricot martin]$ nice -n 15 ./recherche_nouser /tmp &

•[1] 18305

La commande ps -l fait apparaître la valeur de gentillesse à 15 pour la commandefind et le script shell (sh). La priorité de ces deux commandes est plus faible que lesautres qui ont une valeur de gentilles (colonne NI) de 0 (valeur par défaut sousLinux).

•[martin@abricot martin]$ ps -l

•F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

•4 S 524 18103 18102 0 75 0 - 666 wait4 pts/1 00:00:00 bash

•0 S 524 18305 18103 0 77 15 - 611 wait4 pts/1 00:00:00 sh

•0 R 524 18306 18305 78 78 15 - 493 - pts/1 00:00:02 find

•0 R 524 18307 18103 0 74 0 - 915 - pts/1 00:00:00 ps

La commande renice complète la commande précédente. Elle change la valeur degentillesse d’un processus actif. Voici les syntaxes de cette commande :

•$ renice -n incrément -p ID

•$ renice -n incrément -g ID

•$ renice -n incrément -u ID

La syntaxe Linux n’utilise pas d’option -n. L’incrément est directement écrit. L’argu-ment incrément correspond à l’ajustement de la valeur de gentillesse ; -p, -g, -u sontles options :

-p Précise que le numéro ID suivant est celui du ou des processus. Les exemplessuivants diminuent la priorité des processus 18306 et 15336 :

•$ renice -n 6 -p 18306 15336 # pour AIX

•$ renice 6 -p 18306 15336 # pour Linux

© 2004 - Pearson Education France

Page 17: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

Les processus ◆ 291

-g Indique que le numéro ID suivant est celui du ou des groupes de processus. Lesexemples suivants augmentent la priorité des processus dont les groupes sont 508 et 645pour AIX, et personnel pour Linux. L’augmentation de la priorité est réservée à root.

•$ renice -n -14 -g 508 645 # pour AIX

•$ renice -14 -g personnel # pour Linux

-u Indique que le numéro ID suivant est celui du ou des utilisateurs. Les exemplessuivants diminuent la priorité des processus appartenant à dupont et à martin(exécutés par root).

•$ renice -n 4 -u dupont martin # pour AIX

•$ renice 4 -u dupont martin # pour Linux

9. 6 Les traitements différés

Toutes les méthodes de gestion présentées jusqu’ici s’appliquent à des processus inte-ractifs qui se terminent avant la fin de la session. Nous présentons ci-après les proces-sus dont l’exécution se déroule hors connexion.

9.6.1 La commande nohupQuand un processus s’exécute, la déconnexion de la session lui envoie un signalSIGHUP qui l’arrête. Cela interdit toute déconnexion tant qu’un processus impor-tant s’exécute. Pour éviter les déconnexions « brutales », certains systèmes commeAIX préviennent l’utilisateur quand il a encore des processus en arrière-plan qui nesont pas terminés, et refusent la première tentative de déconnexion. Ce n’est pas le casde Linux, qui tue le processus sans préavis. Pour résoudre ce problème, le systèmeUNIX prévoit la possibilité d’exécuter une commande puis de se déconnecter, sanspour autant arrêter l’exécution en cours. L’utilisateur doit demander explicitement,avec la commande nohup, de ne pas tuer le processus. Cette commande exécute laligne de commandes passées en argument et inhibe le signal SIGHUP. Si l’exécutionaffiche des informations à l’écran, celles-ci sont sauvegardées dans le fichiernohup.out, comme dans l’exemple qui suit.

La commande find est lancée avec nohup. Les messages d’erreurs (canal 2) sont redi-rigés vers /dev/null.

•[martin@abricot martin]$ nohup find / -print 2>/dev/null &

•[1] 19114

•[martin@abricot martin]$ ps -f | grep find

•martin 19114 19031 7 02:58 pts/1 00:00:00 find / -print

Le texte qui apparaît normalement à l’écran est conservé dans le fichier nohup.out.

•[martin@abricot martin]$ exit

•Connection closed by foreign host.

© 2004 - Pearson Education France

Page 18: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

292 ◆ Utilisation

Après déconnexion, l’utilisateur martin se connecte à nouveau. Le processus lancéavec nohup est toujours actif, il n’est rattaché à aucun terminal (colonne TTY à ?), et leprocessus père est init.

•[martin@abricot martin]$ ps -f -u martin | grep find

•martin 19114 1 7 02:58 ? 00:00:03 find / -print

Pour conserver l’affichage dans un fichier dont le nom est liste_fichiers, il fautrécrire la commande précédente avec la syntaxe suivante :

•$ nohup find / -print >liste_fichiers &

9.6.2 La commande at

Contrairement à nohup, qui commence l’exécution pendant la session ouverte, lacommande at planifie l’exécution d’une commande, en différé. Le traitement débu-tera à l’heure et à la date indiquées par l’utilisateur.

Fichiers de configuration

L’accès à cette commande est contrôlé par deux fichiers :

• /var/adm/cron/at.allow (AIX) ou /etc/at.allow (Linux) : ce fichier contient laliste des noms des utilisateurs autorisés à se servir de la commande at. Si ce fichier(de même que at.deny) n’existe pas, seul l’utilisateur root peut l’utiliser.

• /var/adm/cron/at.deny (AIX) ou /etc/at.deny (Linux) : ce fichier contient laliste des noms des utilisateurs qui ne sont pas autorisés à se servir de la com-mande at.

Voici un exemple de ces deux fichiers sur un système AIX. Le premier contient uneliste, le second est vide :

•admin(root) $ cat /var/adm/cron/at.allow

•root

•dupont

•admin(root) $ cat /var/adm/cron/at.deny

•admin(root) $

Les tâches qui sont lancées en différé sont rangées dans un répertoire d’attente,/var/spool/cron/atjobs (AIX) ou /var/spool/at (Linux).

Mise en œuvre

La syntaxe de cette commande est variable selon les systèmes, et nous ne pouvonsprésenter ici toutes les syntaxes. De grandes constantes sont cependant respectées,comme la possibilité de préciser la date et l’heure d’un jour particulier, ou bien dedéfinir un délai à partir du moment où la commande at est saisie. Le format de ladate peut être de la forme AAMMJJhhmm, ou encore hh :mm JJ/MM/AA, où AA indiquel’année, MM le mois, JJ le jour, hh l’heure et mm les minutes, selon les systèmes. Voici

© 2004 - Pearson Education France

Page 19: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

Les processus ◆ 293

deux exemples indiquant la date du 10 mars 2004 à 22h. La première syntaxe estpropre à AIX (avec l’option -t), la seconde à Linux :

•$ at -t 0403102200

•$ at 22:00 10/03/04

La commande at lance une suite de commandes qui sont saisies de manière interac-tive. La fin de la saisie doit être indiquée par CTRL+D. Les commandes d’affichagedes travaux en cours sont atq pour Linux et at -l pour AIX. Les commandes desuppression des travaux sont atrm pour Linux et at -r pour AIX. Voici des exemplesde mises en œuvre de cette commande sous Linux et AIX. La première syntaxeprépare une exécution pour le 10 mars 2004 à 22h. La syntaxe est celle du systèmeAIX. On termine la saisie avec la combinaison de touches CTRL+D.

•/home/durand $ at -t 0403102200

•find /tmp –nouser –print 2>/dev/null

•^D

•Job durand.1078952400.a will be run at Wed Mar 10 22:00:00 NFT 2004

La commande at -l confirme la prise en compte du traitement différé :

•/home/durand $ at -l

•durand.1078952400.a Wed Mar 10 22:00:00 NFT 2004

L’utilisateur root peut consulter directement le répertoire atjobs :

•(root) $ ls -l /var/spool/cron/atjobs

•total 8

•-r-Sr-Sr-- 1 durant crip 2163 Mar 09 13:05 durand.1078952400.a

La commande at -r, saisie par l’utilisateur durand, permet de supprimer cetraitement :

•/home/durand $ at -r durand.1078952400.a

•The durand.1078952400.a at file is deleted.

Voici la même manipulation sous Linux. Le format de date change, et les commandesd’affichage et de suppression aussi :

•[martin@abricot martin]$ at 22:00 10/03/04

•warning: commands will be executed using (in order)

•a) $SHELL b) login shell c) /bin/sh

•at> find /tmp -nouser -print 2>/dev/null

•at> ^D

• <EOT>

•job 4 at 2004-10-03 22:00

martin affiche la liste des traitements différés :

•[martin@abricot martin]$ atq

•4 2004-10-03 22:00 a martin

© 2004 - Pearson Education France

Page 20: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

294 ◆ Utilisation

L’utilisateur root peut consulter directement le répertoire /var/spool/at :

•[root@abricot root]# ls -l /var/spool/at

•total 8

•-rwx------ 1 martin personnel 2040 mar 9 04:28 a00005011265d0*

martin supprime son traitement différé :

•[martin@abricot martin]$ atrm 4

On peut également indiquer la date en utilisant des noms pour les mois. Lacommande suivante prépare un traitement pour le 11 avril de l’année en cours, à20h :

•$ at 20:00 Apr 11

Elle peut aussi ne contenir que l’heure de la journée en cours :

•$ at 22:00

Enfin, voici un exemple de préparation d’un traitement où un délai remplace la date.Le traitement s’exécutera dans deux jours à partir de « maintenant ». Ici, la suite decommandes est remplacée par un script shell.

•$ at now + 2 days

•/home/durand/bin/compil_prog

•^D

•Job durand.1079003750.a will be run at Thu Mar 11 12:15:50 NFT 2004.

•/home/durand $ at -l

•durand.1079003750.a Thu Mar 11 12:15:50 NFT 2004

9.6.3 La commande crontabLa commande crontab planifie les tâches répétitives de l’utilisateur qui la saisit. Ellesert beaucoup en administration de systèmes, pour lancer automatiquement des trai-tements tels que le nettoyage de fichiers de /tmp toutes les nuits, la recherche desfichiers ou des répertoires « orphelins » dans tout le système une fois par semaine oupar mois, le redémarrage du serveur tous les soirs, etc. Ces traitements particulierssont lancés par root, qui est le principal utilisateur de la commande crontab.

Fichiers de configuration

Cette commande fonctionne sur le même modèle que at, avec deux fichiers,cron.allow et cron.deny : le premier contient la liste des utilisateurs autorisés, l’autre

À noterVous pouvez aussi lancer un programme en l’indiquant en argument de la commandeat après la date :

at 22:00 /home/durand/bin/compil_prog

© 2004 - Pearson Education France

Page 21: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

Les processus ◆ 295

la liste de ceux pour qui la commande est interdite. Le chemin d’accès à ces fichierschange selon le système UNIX :

• /var/adm/cron/cron.allow et /var/adm/cron/cron.deny pour AIX.

• /etc/cron.allow et /etc/cron.deny pour Linux.

Le répertoire contenant les fichiers de planification est /var/spool/cron/crontabs(AIX) ou /var/spool/cron (Linux).

Mise en œuvre

Cette commande possède deux options principales :

-l Affiche le fichier de planification de l’utilisateur.

-e Sous Linux, édite le fichier de planification en mode pleine page.

Le fichier modifié par la commande est un fichier texte dans lequel chaque lignepossède le même format. Les lignes de commentaires commencent par #. La figure 9.2détaille ce format.

Chaque champ est une valeur numérique, une liste de valeurs ou un intervalle. Lecaractère « * » remplace toutes les valeurs. La liste est une suite de valeurs séparées pardes virgules. L’intervalle est représenté par la première et la dernière valeur, séparéespar un « - ». Voici l’interprétation de la ligne présentée à la figure 9.2. La commande/home/cripsyst/bin/check_activity sera exécutée :

0,30 : toutes les heures pleines et les demi-heures.

8-20 : de 8 heures à 20 heures.

* : tous les jours du mois.

* : tous les mois.

0 : mais seulement le dimanche.

Figure 9.2 • Format du fichier crontab.

0,30 8-20 * * 0 /home/cripsyst/bin/check_activity

Jour du moisde 1 à 31

Heuresde 0 à 23

Minutesde 0 à 59

MoisDe 1 à 121 = janvier2 = février

…12 = décembre

Jour de lasemaineDe 0 à 6

0 = dimanche1 = lundi2 = mardi

3 = mercredi…

6 = samedi

Commande

© 2004 - Pearson Education France

Page 22: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

296 ◆ Utilisation

Voici un exemple d’affichage du fichier crontab de root sur un système AIX :

•admin(root) $ crontab -l

•# -- Nettoyage de /tmp tous les jours a 3h du matin DUPONT 10/3/00 --

•0 3 * * * /usr/sbin/skulker

•# -- Surveillance des FileSystems toutes les heures a 45 minutes--

•45 * * * * /home/cripsyst/bin/check_filesystems

•# -- Verification des quotas a 10h30 et 17h30 JM MARTIN 2/2/04--

•30 10,17 * * * /usr/ucb/quotacheck -a

•# -- Trace l activite du serveur toutes les 10 minutes de 8h a 20h --

•0,30 8-20 * * 0 /home/cripsyst/bin/check_activity

Il est possible de mettre en place un crontab en indiquant en argument de lacommande un nom de fichier. Ce fichier texte doit contenir des lignes au format indi-qué ci-dessus. La syntaxe suivante montre la création d’un crontab à travers unfichier texte dont le nom est « planification », et qui contient des lignes au formatprésenté. Il faut saisir la commande :

•$ crontab planification

Sous Linux, il est possible d’éditer directement le fichier actif. Pour cela il suffit desaisir :

•$ crontab -e

Par précaution, il est préférable de modifier la planification des tâches en procédantpar étape :

1. Conservation de la planification dans un fichier sur disque.

2. Modification de cette copie.

3. Mise à jour des changements.

Voici cette manipulation sous Linux. La première commande affiche l’état de la plani-fication pour l’utilisateur martin :

•[martin@abricot martin]$ crontab -l

•40 * * * * /home/martin/compil_projet

À noterLe fichier de planification de root est très important car c’est lui qui régule l’activité« nocturne », les statistiques d’utilisation, et souvent les auto-tests de sécurité du ser-veur. Il faut donc prendre l’habitude d’ajouter des commentaires clairs et d’indiquer ladate de modification, mais aussi l’auteur si le compte d’administration est géré parplusieurs personnes. Avant toute modification, il faut conserver un état de ce fichier àla date du jour en saisissant, par exemple :

$ crontab -l > crontab.root.20040309

© 2004 - Pearson Education France

Page 23: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

Les processus ◆ 297

L’utilisateur martin sauvegarde puis édite le fichier :

•[martin@abricot martin]$ crontab -l > crontab.martin

•[martin@abricot martin]$ vi crontab.martin

Le fichier modifié est installé :

•[martin@abricot martin]$ crontab crontab.martin

martin vérifie que la modification (la valeur est passée de 40 à 30) est active :

•[martin@abricot martin]$ crontab -l

•30 * * * * /home/martin/compil_projet

9. 7 Les démons

Les démons, ou daemons, sont des processus particuliers qui sont toujours actifs. Leurnom comprend souvent (mais pas toujours) le suffixe « d », pour « daemon ». Ainsi,le démon cron qui déclenche les actions indiquées par la commande crontab senomme crond sous Linux et cron sous AIX.

Le rôle des démons est de gérer les services proposés par le serveur, qu’il s’agisse dedémons système, comme la planification des tâches (cron), ou réseau, commetelnetd. Ils doivent toujours être actifs, car leur arrêt implique l’arrêt du service.

Les démons réseau sont à surveiller car ils constituent des portes d’accès au serveur, ets’ils ont des failles de sécurité, la machine peut être l’objet de piratages. L’administra-teur doit donc veiller à activer uniquement les services qu’il veut offrir aux utilisa-teurs. L’activation des démons peut se faire de deux manières : au démarrage del’ordinateur ou à la demande.

Lorsque le démon est activé au démarrage du serveur, son lancement est effectué parun fichier système interprété pendant cette phase. C’est le cas du démon cron, qui estactivé par le fichier /etc/inittab sous AIX. Les autres fichiers de démarrage dusystème AIX sont /etc/rc, /etc/rc.tcpip et /etc/rc.nfs : ils activent par exemple ledémon nfsd pour la gestion des systèmes de fichiers réseau.

•(root) $ cat /etc/inittab

•init:2:initdefault:

•brc::sysinit:/sbin/rc.boot 3 >/dev/console 2>&1 # Phase 3 of system boot

•rc:23456789:wait:/etc/rc 2>&1 | alog -tboot > /dev/console # Multi-User

AstuceIl est possible, grâce à la commande at, d’obtenir un comportement identique au cron(répétitif ). Pour cela, il suffit de rappeler la même commande at à la fin de son exécu-tion. Quand at est terminé, il peut par exemple recréer un at identique pour le lende-main. Ce système vous donne la possibilité d’automatiser des tâches répétitives mêmesi vous n’avez pas accès à la commande crontab.

© 2004 - Pearson Education France

Page 24: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

298 ◆ Utilisation

•srcmstr:23456789:respawn:/usr/sbin/srcmstr # System Resource Controller

•rctcpip:23456789:wait:/etc/rc.tcpip > /dev/console 2>&1 # TCP/IP daemons

•rcnfs:23456789:wait:/etc/rc.nfs > /dev/console 2>&1 # NFS Daemons

•cron:23456789:respawn:/usr/sbin/cron

•...

Linux possède une hiérarchie de fichiers de démarrage qui se trouvent dans le répertoire/etc/rc.d. Le fichier principal d’initialisation du système est /etc/rc.d/rc.sysinit.

•[martin@abricot martin]$ ls -l /etc/rc.d

•total 80

•drwxr-xr-x 2 root root 4096 jan 16 08:44 init.d/

•-rwxr-xr-x 1 root root 3526 sep 24 16:30 rc*

•drwxr-xr-x 2 root root 4096 jan 27 04:19 rc0.d/

•drwxr-xr-x 2 root root 4096 jan 27 04:19 rc1.d/

•drwxr-xr-x 2 root root 4096 jan 27 04:19 rc2.d/

•drwxr-xr-x 2 root root 4096 jan 27 04:19 rc3.d/

•drwxr-xr-x 2 root root 4096 jan 27 04:19 rc4.d/

•drwxr-xr-x 2 root root 4096 jan 27 04:19 rc5.d/

•drwxr-xr-x 2 root root 4096 jan 27 04:19 rc6.d/

•-rwxr-xr-x 1 root root 1636 sep 24 16:30 rc.local*

•-rwxr-xr-x 1 root root 601 sep 24 16:30 rc.modules*

•-rwxr-xr-x 1 root root 32837 sep 24 16:30 rc.sysinit*

Lorsque le démon est activé à la demande, il est pris en charge par le « super-démon », inetd. Celui-ci gère les démons réseau qui doivent répondre à chaque solli-citation d’un client. Par exemple, chaque accès au serveur par un client telnet impli-que l’exécution d’un nouveau démon telnetd par inetd . Le super-démon estconfiguré par le fichier /etc/inetd.conf, dont voici un exemple sous AIX :

• (root) $ cat /etc/inetd.conf

•# service socket protocol wait/ user server server program

•# name type nowait program arguments

•# -- Demons pour les clients telnet et ftp ---

•ftp stream tcp6 nowait root /usr/sbin/ftpd ftpd

•telnet stream tcp6 nowait root /usr/sbin/telnetd telnetd -a

•# -- Demons pour l acces au courrier ---

•imap2 stream tcp nowait root /usr/sbin/imapd imapd

•pop3 stream tcp nowait root /usr/sbin/pop3d pop3d

Les démons sont des processus que l’on peut administrer comme les autres avec lacommande kill. Pour arrêter le démon cron sous AIX, il faut saisir (en tant queroot) :

•(root) $ ps -ef|grep cron # AIX

•root 295022 1 0 Feb 29 - 0:08 /usr/sbin/cron

•(root) $ kill –9 295022 # AIX

Pour relancer le démon, il suffit de taper :

•(root) $ /usr/sbin/cron # AIX

© 2004 - Pearson Education France

Page 25: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

Les processus ◆ 299

Cependant, la plupart des systèmes proposent des méthodes moins « violentes » quela commande kill. AIX dispose de deux commandes, stopsrc et startsrc :

•(root) $ stopsrc –s nfsd # AIX : Arret de nfs

•(root) $ startsrc –s nfsd # AIX :Demarrage de nfs

Linux propose des scripts de démarrage et d’arrêt. C’est le cas par exemple dumontage dynamique des disques réseau géré par le démon /usr/sbin/automount.Pour démarrer le démon, il suffit d’appeler le script, avec start en argument. Pour lestopper, il faut utiliser l’argument stop.

•admin(root) $ /etc/rc.d/init.d/autofs stop # Linux : Arret automount

•admin(root) $ /etc/rc.d/init.d/autofs start # Linux : Demarrage

• # automount

Résumé

Les processus correspondent aux logiciels actifs. Chaque processus est autonome, ilpossède un processus père et peut lui-même engendrer un processus fils. L’activité duserveur est représentée par une hiérarchie de processus pères et de processus fils dontle premier est init.

Chaque processus possède un numéro unique, son PID (Process IDentification). C’està travers ce numéro qu’il est administré. Il connaît le numéro de son père, qu’il réfé-rencie par son PPID (Parent Process IDentification). Les processus communiquententre eux grâce aux signaux qu’ils émettent et reçoivent. Chaque signal correspond àun événement non prévu dans le traitement normal du logiciel. Des actions sontprédéfinies selon le numéro du signal, le plus connu étant le numéro 9, qui arrête(« tue ») le processus.

On peut générer les signaux en appuyant sur des touches de contrôle. Dans ce cas, lelogiciel en cours d’exécution reçoit le signal attribué à la combinaison de touches enquestion. Par exemple, les combinaisons CTRL+C et CTRL+Z émettent les signauxSIGINT (numéro 2) et SIGTSTP (numéro 18 ou 20 selon les systèmes), ce qui arrêteou suspend l’exécution. Cette méthode de gestion interactive ne peut s’appliquerqu’aux processus d’avant-plan, non à ceux d’arrière-plan.

La méthode la plus courante, et qui s’applique à tous les types de processus (avant-plan et arrière-plan), utilise des commandes explicites, comme ps ou kill, qui affi-chent la liste des processus et envoient des signaux aux processus dont le PID estspécifié. D’autres commandes complémentaires, comme fuser, nice ou renice,permettent d’affiner la gestion en tuant des groupes de processus ou en changeantleur priorité.

Il existe une autre catégorie de processus qui ne sont pas rattachés à une connexion.Ces traitements différés s’exécutent quand l’utilisateur n’est plus connecté. Lescommandes nohup, at et crontab permettent de préparer ces traitements : nohup lance

© 2004 - Pearson Education France

Page 26: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

300 ◆ Utilisation

une tâche en évitant qu’elle ne soit tuée à la déconnexion, at prépare une exécutiondifférée et crontab planifie des tâches différées répétitives.

Enfin, il existe certains processus très particuliers : les démons. Ils sont actifs enpermanence et rendent des services internes (planification des tâches, par exemple)ou externes (comme les services réseau). Ils sont lancés soit au démarrage du systèmepar des fichiers spécifiques (/etc/inittab, /etc/rc, etc.), soit à la demande, quand ilssont pris en charge par le « super-démon », inetd.

Questions et exercices

Questions de révision

1. Qu’est-ce que le PID et le PPID d’un processus ?

2. Quel est le rôle des signaux ?

3. Quel est le nom du signal qui arrête un processus interactif ? Quelle combinai-son de touches lui est attribuée ?

4. Comment faire pour exécuter une commande en arrière-plan ?

5. Quelle est la différence entre la commande ps -f et la commande ps -ef ?

6. Quelle commande permet de tuer un processus particulier, et quelle commandepermet de tuer les processus attachés à un répertoire?

7. Une valeur positive pour la commande nice augmente-t-elle la priorité duprocessus ?

8. Quelle est la différence entre la commande nohup et la commande at ?

9. Quelle est la commande qui permet de planifier des traitements différés ? Quelest le nom du démon qui gère le déclenchement de ces traitements ?

10. Comment se nomment les deux fichiers qui donnent accès à la commande at ?

© 2004 - Pearson Education France

Page 27: © 2004 - Pearson Education France · 2004. 8. 30. · 280 Utilisation La commande killtue définitivement le processus arrêté.La syntaxe %1 correspond à la numérotation du processus

Les processus ◆ 301

Exercices

1. Affichez la liste des signaux connus.

2. Désactivez la possibilité d’interrompre une exécution avec CTRL+C.

3. Réactivez la frappe de CTRL+C.

4. En langage de commandes, créez une boucle qui affiche le texte «en boucle»toutes les deux secondes.

5. Suspendez l’activité de ce processus par une combinaison de touches puispassez-le en arrière-plan.

6. Tuez ce processus d’arrière-plan.

7. Saisissez la commande qui parcourt toute votre hiérarchie et conserve le nomde tous les objets trouvés dans un fichier trace. Cette commande sera exécutéeen arrière-plan.

8. Tapez la commande qui confirme que le processus dont le PID est 2345n’existe pas.

9. Affichez la liste de tous les processus de l’utilisateur martin.

10. Affichez la liste de vos processus avec leur niveau de priorité.

11. Affichez les informations sur le père de votre login shell.

12. Affichez la liste de vos processus avec les informations suivantes : l’UID, le PID,le PPID et la commande, dans cet ordre.

13. En une seule commande, tuez tous les processus de votre session.

14. En une seule commande, tuez tous les processus de toutes vos sessions.

15. Vous êtes l’administrateur root ; tuez tous les processus attachés au répertoire/home/martin.

16. Modifiez la syntaxe de la réponse à la question 7 pour que la commande sepoursuive quand vous vous déconnectez.

17. Exécutez votre script shell de compilation my_compil en arrière-plan, avec unniveau de priorité plus faible de 10 (incréments) que celui de la prioriténormale. Vous êtes en bash.

18. Donnez la syntaxe de la ligne du fichier mis en place par la commandecrontab, qui exécute la commande /usr/local/bin/check_fs tous les samedisà 2h45 du matin.

19. Affichez la liste de vos tâches planifiées (crontab).

20. Vérifiez si le démon nfsd est actif.

© 2004 - Pearson Education France