tete du loic

 Loïc YON [KIUX]

  • Enseignant-chercheur
  • Référent Formation Continue
  • Responsable des contrats pros ingénieur
  • Référent entrepreneuriat
  • Responsable de la filière F2 ingénieur
  • Secouriste Sauveteur du Travail
mail
loic.yon@isima.fr
phone
(+33 / 0) 4 73 40 50 42
location_on
ISIMA
  • twitter
  • linkedin
  • viadeo

[UNIX] TP 3

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

On va maintenant jouer avec plusieurs processus :

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 :

Voyons maintenant ce qui se passe quand on tue un processus parent d'autres processus...

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 :

$ eog 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.

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 le 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