On appel processus l'image d'un fichier programme contenant du code exécutable binaire en cours d'exécution.
La connexion génère un processus, de même que tout programme exécuté.
Un utilisateur peut lancer plusieurs processus en même temps.
Un processus peut être exécuté en avant plan ou arrière-plan (appelé processus background ou tâche de fond)
Syntaxe :
ps [OPTIONS]
Options | Descriptions |
---|---|
-e |
Affiche les informations pour tous les processus |
-u nom_du_user |
Affiche les informations pour l'utilisateur spécifié |
-t tty |
Affiche les informations pour un tty particulier |
-f |
Affiche les informations au format long |
Sans option, ps
affiche les informations des processus de l'utilisateur présentées sur 4 colonnes comme ceci :
Colonnes | Descriptions |
---|---|
PID |
Process ID : Identifiant unique d'un processus |
TTY |
Nom du terminal auquel le processus est rattaché |
TIME |
Temps cumulé de l'exécution du processus (vu par le processeur) |
COMMAND |
Commande à l'origine du processus |
Avec l'option -f
les informations suivantes sont également affichées :
Colonnes | Descriptions |
---|---|
UID |
User ID : Nom du user propriétaire du processus |
PPID |
Parent Process ID : identifiant unique du processus parent |
STIME |
Heure de départ du processus |
kill [-signal] <PID>
Options | Descriptions |
---|---|
-signal |
Valeur numérique correspondant à des signaux envoyés aux processus. 15 : Arrêt logiciel. 2 : Interruption (équivalant à CTRL+C). 9 : Arrêt inconditionnel (arrêt forcé) |
PID |
Process ID : identificateur du processus à arrêter |
Sans valeur de signal, la commande kill
va envoyer un signal à 15
au processus spécifié par le PID.
Ce signal peu ne pas être pris en compte par le processus et dans ce cas sera peut être nécessaire d'envoyer le signal 9
pour forcer l'arrêt.
Mise à part root, seul le propriétaire d'un processus peut faire une demande d'arrêt.
time <cmd>
Options | Descriptions |
---|---|
cmd |
Commande pour laquelle on souhaite obtenir le temps d'exécution |
time
est une commande interne à certains shells. Elle n'est donc pas disponible dans tous les shells.
La commande est exécutée normalement puis le temps d'exécution est alors affiché.
Ce temps est donné par trois valeurs :
Valeurs | Descriptions |
---|---|
real |
Temps écoulé depuis le lancement de la commande |
user |
Temps d'exécution de la commande en mode utilisateur |
sys |
Temps d'exécution de la commande en mode système |
Le temps total d'exécution (autrement dit l'utilisation du processus) est obtenu en ajoutant les valeurs user
et sys
.
Le lancement d'un processus en arrière-plan permet de récupérer "la main" juste à après avoir lancé le processus.
Il ne faut pas oublier dans ce cas de rediriger les sorties généres par le processus.
Syntaxe :
commande &
Exemple :
$ find / -name "test*" > rechtest 2>/dev/null &
Après validation de la commande, deux informations sont retournée avant de récupérer le prompt :
Les processus lancés en arrière-plan peuvent être gérés par la commande jobs
.
jobs -l
>permet de récupérer la liste des jobs et leur PID.
Les informations retournées par la commande jobs sont les suivantes :
[n]
numéro du job+
job le plus récent-
job qui précède directement le plus récentPID
Numéro du processusEtat du job
En cours d'exécution ou terminéIl est également possible d'intervenir sur un job en arrière-plan pour le passer en "avant plan" tout comme il est possible de passer un processus "d'avant-plan" en job (arrière-plan)
La commande bg
permet de reprendre un processus mis en pause par ^z
ou par l'envoi du signal SigSuspend
.
La commande fg
permet de ramener un job en "avant-plan".
Commande | Descriptions |
---|---|
bg <%numéro> |
Permet de relancer un processus stoppé |
fg <%numéro> |
Permet de ramener un job en "avant-plan" |
Il est possible d'envoyer des signaux aux jobs à l'aide de la commande kill
sans connaître le numéro du processus sur lequel on veut intervenir.
Dans ce cas la commande kill
à utiliser sera celle-ci :
kill [-signal] <%numéro>
Commande | Descriptions |
---|---|
%n |
n correspond au numéro du job entre [ ] affiché par la commande jobs |
%% |
Correspond au dernier job lancé |
%+ |
Identique à %% |
%- |
Correspond à l'avant dernier job lancé |
Lorsque l'on exécute une commande en arrière-plan dans un tty ou dans une console graphique, celle-ci est exécutée en arrière-plan.
Si l'on se déconnecte ou si l'on ferme la console graphique, le processus lancé en arrière-plan est alors tué (kill
).
Une manière simple d'éviter ce problème est de précéder la commande par nohup
en prenant soin de terminer la commande par &
pour que l'exécution se fasse en arrière-plan.
la commande ne possédant plus de sortie standard, elle la remplacera par un fichier nohup.out
.
Ce fichier sera créé dans le répertoire de travail ou dans $HOME
si l'écriture n'est pas autorisée.
Comment garder une session ouverte malgré une coupure de connexion SSH.
L'un des grands interêts de screen
est de permettre d'ouvrir plusieurs terminaux dans une même console, de passer de l'un à l'autre et de les récupérer plus tard expliquant sa désignation de "multiplexeur" de terminaux.
Le fichier de configuration est particulièrement important.
Il est placé dans le home de l'utilisateur : .screenrc
Exemple :
startup_message off
deflogin on
vbell off
vbell_msg " !!! "
hardstatus off
hardstatus string "%h%? users : %u%?"
caption always "%{wk}%?%-Lw%?%{bw}%n*%f %t%?(%u)%?%{wk}%?%+Lw %=%{mk}@%H %{yk}%D %{ck}%M%{wk} %{ck}%d %{gk}%c"
termcapinfo xterm ti@:te@
bindkey -k k8 prev
bindkey -k k9 next
Un des autres interêts de screen
est de pouvoir gérer plusieurs consoles.
Sur une même session, on peut donc faire plusieurs traitements en parallèle, comme par exemple lancer une commande et visualiser l'aide associée.
Commande | Descriptions |
---|---|
Ctrl+a+c |
Créé une nouvelle fenêtre |
Ctrl+a+k |
Ferme une fenêtre |
Ctrl+a+" |
Lister les fenêtres |
Une fois qu'on a créé autant de console que souhaité, il va falloir être en mesure de passer de l'une à l'autre.
Commande | Descriptions |
---|---|
F8 |
Fenêtre précédente (grâce au setting bindkey -k k8 prev se trouvant dans le fichier de config .screenrc ) |
F9 |
Fenêtre suivante (grâce au setting bindkey -k k9 prev se trouvant dans le fichier de config .screenrc ) |
Contrairement à un terminal normal, il n'est pas possible de scroller (se déplacer verticalement) dans la console.
screen
propose un raccourcis clavier permettant de se mettre en mode "copie" et ainsi parcourir la fenêtre active.
Commande | Descriptions |
---|---|
Ctrl+a+Echap |
Se mettre en mode copie |
Echap |
Quitter le mode copie |
Il est possible de découper l'écran en plusieurs consoles.
Par exemple lorsque l'on veut lancer une commande et voir le fichier de log associé, il sera possible d'avoir les deux consoels en même temps.
Commande | Descriptions |
---|---|
Ctrl+a+S |
Découper l'écran |
Ctrl+a+Tab |
Se déplacer entre les zones |
Ctrl+a+X |
Fermer la zone active |
Toutes les commandes et les processus en cours possèdent un niveau de priorité allant de -20 à +19, le niveau de priorité le plus élevé étant de -20 et le plus faible étént de +19.
Le niveau de priorité est hérité de celui du parent (normalement le niveau est de 0).
la commande nice
permet d'exécuter une commande avec un niveau de priorité différent de zéro.
Seul l'utilisateur root peut lancer une cimande avec un niveau de priorité négatif (donc supérieur à la normale).
Les utilisateurs peuvent quant à eux seulement lancer une commande avec un niveau de priorité plus faible (donc inférieur à la normale).
Syntaxe :
nice [options] <commande [arguments]>
Sans options ni arguments, la commande renverra le niveau de priorité du shell en cours.
La valeur à définir est à indiquer dans la partie [options]
juste après la commande nice
exemple :
$ nice +5 script.sh
La commande renice
permet de modifier la priorité d'une tâche en cours d'exécution.
Mise à part pour root, les utilisateurs ne peuvent modifier la priorité que des tâches dont ils sont propriétaires.
La commande renice
possède plus d'options que la commande nice
puisqu'il est possible d'agir par numéro de processus, par utilisateur propriétaire ou par groupe propriétaire
renice [N° de priorité] [[-p] processID] [[-g] processGROUP] [[-u] user]
Options | Descriptions |
---|---|
-p |
Permet de préciser un numéro de processus sur lequel agir. Option par défaut si aucune option n'est précisé lors de la commande renice |
-g |
Permet d'agir sur les processus appartenant au groupe |
-u |
Permet d'agir sur les processus appartenant à l'utilisateur |
Unix travail à partir de flux (suite non formatée d'octets).
L'entrée d'une commande est traitée comme un flux, de même que le résultat et les éventuelles erreurs.
Pour chaque commande il existe 3 flux :
Flux | Descriptions |
---|---|
0 |
stdin : flux d'entrée standard (clavier) |
1 |
stdout : flux de sortie standard (écran) |
2 |
stderr : flux de sortie erreur (écran) |
Options | Descriptions |
---|---|
> fichier |
Redirection du flux de sortie standard vers un fichier avec écransement du fichier si existant |
>> fichier |
Redirection du flux de sortie standard vers un fichier en ajoutant le résultat en fin de fichier (concaténation) |
Options | Descriptions |
---|---|
2>fichier |
Redirection du flux de sortie erreur vers un fichier |
2>&1 |
Possibilité de rediriger le flux de sortie erreur dans le même fichier de redirection que celui du flux de sortie standard (en bash : &> ) |
Options | Descriptions |
---|---|
< fichier |
Remplacement de l'entrée standard (le clavier) par le contenu de fichier |
Un Pipeline permet de créer une liaison entre deux commandes.
La sortie (le résultat) de la première commande devient alors l'entrée de la seconde.
un Pipeline permet de combiner les possibilités de plusieurs commandes et de les enchaîner de manière dépendante.
Le mécanisme des Pipelines permet entre autre de combiner les possibilités de commandes différentes.
Lorsque l'on écrit une commande, un Pipeline est symbolisé par le caractère |
Un Pipeline est un canal unidirectionnel qui relie la sortie standard d'une commande à l'entrée d'une autre.
La commande tee
permet de rediriger le résultat d'une commande tout en conservant la sortie standard.
Dans l'exemple suivant la commande who
sera redirigée dans le fichier fichier.txt
mais également affiché à l'écran
$ who | tee fichier.txt