Date de première publication : 2015/09/08
Cette séance se focalise sur la gestion des processus et sur quelques commandes
Arrêter un processus [interactif] en cours
Si vous voulez arrêter la commande en cours, il suffit de presser simultanément les touches CTRL et C.
$ tree /home/local.isima.fr
CTRL + C
$
Commandes interactives ou en arrière-plan
Taper la commande suivante :
$ xclock -digital -update 1
xclock
se lance et bloque le terminal. Quitter xclock
(proprement ou avec CTRL+C sur le terminal) et le terminal redevient disponible.
xclock
s'est lancé au premier plan, on dit encore en mode interactif. L'utilisateur peut interagir avec le programme avec le clavier
(on est sur un terminal).
Pour ne pas bloquer le terminal, il faut lancer le processus en tâche de fond / arrière-plan. Pour cela, il faut ajouter l'esperluette encore appelée "et commercial"
$ xclock &
Si vous avez oublié l'esperluette (&), pas de panique et surtout pas la peine de tuer le processus. Il faut appliquer la recette suivante :
$ xclock
CTRL+Z
[1]+ Stopped xclock
$ bg
[1]+ xclock
$ xclock &
Pour récapituler, on a lancé xclock
au premier plan, on l'a mis en pause puis redémarré en arrière-plan.
On va s'amuser avec le programme xeyes
maintenant
- Lancer
xeyes
en mode interactif. Constater combien l'application est utile - Mettre en pause l'application avecCTRL+Z. Que constatez-vous ?
- Mettre l'application en arrière-plan. Qu'est-ce qui remarche ?
- La remettre au premier plan (
fg
) - Tuer l'application
On va maintenant jouer avec plusieurs processus dont un, bc
, déjà vu et que l'on peut utiliser comme une calculatrice :
- Lancer un
xeyes
, le mettre en pause - Lancer un
xclock
, le mettre en pause - Lancer un
bc
. Faire un calcul, le mettre en pause - Faire la liste de tous les jobs
- Mette en tâche de fond
xeyes
- Mette en tâche de fond
bc
. Que se passe-t-il ? - Mettre
bc
au premier plan - Quitter (combinaison CTRL + C ou commande quit)
Processus
Pour lister les processus sur une machine, deux commandes (au moins) existent en fonction de ce que l'on veut faire. Si vous voulez contrôler qui occupe des ressources mémoire du serveur (processeur, mémoire vice ou disque), essayez la commande :
$ top
La commande top
a plein d'options. htop
peut sembler plus intéressante à priori.
Pour sortir du programme, il faudra taper la lettre 'q'. La commande top peut apparaître dans les listes des processus affichés car monitorer prend des ressources et c'est d'autant plus flagrant si la machine n'est pas très occupée. En cette période de TP, vous devriez constater la prolifération de navigateurs.
Pour avoir la liste des processus avec moults détails, voici les commandes :
ps aux OU
ps -aux
ps -ef
La commande ps
n'est pas très standard, il faut donc vérifier les options sur chaque type de machine que l'on utilise (notamment la présence ou non du tiret dash)
Pour voir l'arborescence des processus (liens entre processus père et fils), il existe la commande pstree
.
Commande kill
La commande kill
permet d'envoyer un signal à un processus. Par défaut, elle envoie un signaux de "fin" à l'amiable.
Commençons par les signaux :
- Lancer un
xeyes
en arrière-plan. Vérifier le bon fonctionnement. - Trouver le PID du processus
- Mettre en pause le processus avec la commande
kill -STOP
. Vérifier le comportement. - Relancer le processus avec la commande
kill -CONT
. Vérifier le comportement. - Tuer le processus avec la commande
kill
Voyons maintenant ce qui se passe quand on tue un processus parent d'autres processus...
- Lancer un nouveau terminal en tâche de fond
xterm &
ouKonsole &
- Lancer un
xeyes
et unxclock
en tâche de fond dans ce nouveau terminal. - Tuer le nouveau terminal
Certains processus sont détachés du terminal. Cela peut être le cas de firefox. Lancer firefox à partir d'un terminal et tuer le terminal...
On verra la commande killall
jeudi mais cela ne vous empêche pas de faire un man
Pour finir sur le kill
, taper la commande
$ kill -9 -1
J'ai oublié de vous dire : le TP n'est pas encore terminé !
Les tubes
Welcome back ! On va essayer de résoudre un problème, l'affichage des droits de votre répertoire $HOME.
Allez dans dans /home/local.isima.fr
! Si vous faites
un ls votre_login,
le contenu du répertoire apparaît. Essayez :
$ ls | grep login
$ ls | grep $USER
$ ls -l | grep $USER
Si le nom d'utilisateur est long, il est possible que la variable $USER soit tronquée.
Si une commande affiche trop de choses à l'écran, vous pouvez lire le résulat page par page :
$ ps -ef | more
$ ps -ef | grep 501 | less
501 représente un numéro d'utilisateur ou de groupe. Si la commande ne renvoie rien, c'est que l'utilisateur 501 n'existe pas ou n'a rien lancé.
Commande nohup
La commande nohup
permet de continuer l'exécution du programme à la déconnexion de l'utilisateur
Téléchargez le script python. Ce script calcule l'ensemble de julia et suivant le paramètre donné au script crée une image ou l'affiche à l'écran, par exemple :
$ python3 julia.py image.png
Si vous vous déconnectez avant que le calcul ne soit terminé, vous n'obtiendrez aucun résultat. Les programmes qui s'exécutent sont tués à la déconnexion. En revanche si vous lancez le script en nohup, vous pourrez avoir le résultat à la reconnexion ...
$ nohup python3 julia.py image.png &
Si vous ne redirigez pas la sortie standard et la sortie d'erreur standard, la commande nohup
le fera pour vous. Si votre commande attend des informations au clavier, pensez également à rediriger l'entrée standard !
Le résultat du script (l'image au format png) peut être affichée en ligne de commande :
$ gwenview image.png &
Vous pouvez également utiliser The Gimp (caché dans le menu Applications/Graphisme) ou même un navigateur.
$ firefox image.png &
Commande crontab
Il est possible de lancer des tâches/actions de manière périodique. Prenons l'exemple d'une nuit passionnée sur un TP à rendre le lendemain. Pour éviter la perte du fichier nom
, on veut sauvegarder le dit fichier dans un répertoire sauv
toutes les minutes.
- Créer un répertoire
temp
dans votre$HOME
- Créer dans ce répertoire un fichier
nom
et un sous-répertoiresauv
- Récupérer le fichier
action.sh
. Le fichier téléchargé n'a pas le bon nom, renommez-le ! C'est un fichier de script bash. Pour l'exécuter, il est nécessaire de lui mettre un droit d'exécution. - Vous devez lancer le script pour voir ce qu'il fait. Si ça marche, on peut passer à l'étape suivante.
Il est maintenant nécessaire de lancer ce script toutes les minutes. La commande crontab -l
permet de vérifier ce qui est programmé (à priori rien pour l'instant - affichage vide). Vous allez éditer le fichier avec crontab -e
(l'éditeur est nano
par défaut) et ajouter la ligne suivante :
*/1 * * * * $HOME/temp/action.sh
Si vous êtes un peu patient(e), vous verrez le répertoire sauv
se peupler un peu. Si quelque chose se passe mal, l'information est donnée dans une redirection (à mettre en place) ou par mail (si c'est installé - ce n'est pas le cas sous ada ou turing).
Si vous voulez avoir des exemples de fichiers crontab, il faut lire la manuel (la section 5, pas la section 1 !) :
$ man crontab
$ man 5 crontab
Pour finir, n'oubliez pas d'effacer la tâche périodique avec crontab -r
par exemple
Pratique, non ?! On verra plus tard dans l'année une autre commande intéressante : git
- 1
- 2
- 3
- 4