Comment afficher les processus dynamiquement avec une entête statique
BillyV33
-
billyV33 Messages postés 24 Statut Membre -
billyV33 Messages postés 24 Statut Membre -
Bonjour,
je dois écrire un script qui me permet d'avoir un affichage dynamique des processus en cours en boucle infinie et avec un affranchissement de 2 secondes
De plus , il faudrait afficher par dessus les lignes déjà écrites...je pense que je dois garder l'entête statique ...
on me demande de lire le manuel console_codes et de caractères spéciaux CSI sequence mais je ne comprend rien...!
pour l'instant à part afficher avec des entêtes demandées des ps en cours....
je bloque complètement!
J'ai beau lire le manuel ... je ne sais même pas par où commencer ni quoi parmi tout cela pourrait bien me servir !
Merci de me sortir de cet impasse et énorme trou noir!!
je dois écrire un script qui me permet d'avoir un affichage dynamique des processus en cours en boucle infinie et avec un affranchissement de 2 secondes
De plus , il faudrait afficher par dessus les lignes déjà écrites...je pense que je dois garder l'entête statique ...
on me demande de lire le manuel console_codes et de caractères spéciaux CSI sequence mais je ne comprend rien...!
pour l'instant à part afficher avec des entêtes demandées des ps en cours....
je bloque complètement!
J'ai beau lire le manuel ... je ne sais même pas par où commencer ni quoi parmi tout cela pourrait bien me servir !
ps -o suser,pid,%cpu,%mem,cputime,comm | head
Merci de me sortir de cet impasse et énorme trou noir!!
Configuration: Linux / Firefox 60.0
A voir également:
- Comment afficher les processus dynamiquement avec une entête statique
- Afficher appdata - Guide
- Afficher les modifications word - Guide
- Afficher taille dossier windows - Guide
- Comment faire un tableau croisé dynamique - Guide
- Afficher toutes les lignes masquées excel ✓ - Forum Excel
7 réponses
bonjour
effectivement je l'avais remarqué top avait ce comportement...
mais là on me demande, pour monTP!, et il me manque deux questions et c'est pour demain!!!
en tout cas!
voilà ce qu'on me demande :
MERCIIII!!! lEprofSonDkon d'être encore là ! :):)
effectivement je l'avais remarqué top avait ce comportement...
mais là on me demande, pour monTP!, et il me manque deux questions et c'est pour demain!!!
en tout cas!
voilà ce qu'on me demande :
## Fonctionnement
minitop contient une "boucle infinie" qui lui permet de rester en cours d'execution. Toutes les 1 seconde l'appel à `ps` est renouvelé et (c'est là que je bogue!) l'affichage des nouvelles lignes se fait par dessus les anciennes lignes. Visuellement cela reste presque statique, comme l'appel au programme "top".
On peut quitter le programme en utilisant simplement Ctrl-C.
L'appel à `ps` doit être fait de la manière suivante :
- afficher tous les processus du système
- afficher les colonnes suivantes :
le nom d'utilisateur, le pid, l'utilisation du cpu, le pourcentage de la mémoire physique que le process occupe, le temps CPU cumulé, et le nom de la commande.
Les options à afficher sont les mêmes en cas d'option sans la boucle infinie.
(et ici on me perd complètement!)
Pour afficher par dessus des lignes déjà écrites, vous allez avoir besoin de la page de manuel "console_codes" et de caractères spéciaux. Cherchez le paragraphe qui contient "CSI sequence".
## Exemples
Pour mieux comprendre comment utiliser ces caractères spéciaux, testez ça :
```sh
echo -e "coucou___ \033[4Di"
echo -e "coucou___ \033[1Di"
echo -e "coucou___ \033[10DQ"
echo -e "coucou___ \033[13Cplus loin: bonjour"
MERCIIII!!! lEprofSonDkon d'être encore là ! :):)
d'abord, il faut faire un "clear" de la console, c'est-à-dire déplacer le curseur tout en haut du terminal (HOME) et effacer l'écran
ensuite, tu affiches l'en-tête
puis, à chaque tour de boucle, il faut positionner le curseur à la ligne 2 colonne 0
dans la page man, ESC correspond au code
les passage en italique sont des fonctionnalités ANSI/CSI
il n'y a pas de secret, il faut "jouer" avec les séquences pour voir comment elles fonctionnent.
AH! MES YEUX !
LES BALISES CODES !!!
ensuite, tu affiches l'en-tête
puis, à chaque tour de boucle, il faut positionner le curseur à la ligne 2 colonne 0
dans la page man, ESC correspond au code
\033[donné dans les exemples.
les passage en italique sont des fonctionnalités ANSI/CSI
il n'y a pas de secret, il faut "jouer" avec les séquences pour voir comment elles fonctionnent.
AH! MES YEUX !
LES BALISES CODES !!!
Vraiment désolée pour le balises ! décidément je suis bouchée!!
je pensais avoir bien mis ma petite ligne de code bien en évidence!
Peux-tu me faire un exemple STP parce que je ne saisi pas où je me trompe et ça m’énerve de devoir t’arracher les yeux à chaque fois!!!
Encore merci pour tes explications!:):)
je vais regarder ça et je reviens..
:):)
je pensais avoir bien mis ma petite ligne de code bien en évidence!
ps -o suser,pid,%cpu,%mem,cputime,comm | head
Peux-tu me faire un exemple STP parce que je ne saisi pas où je me trompe et ça m’énerve de devoir t’arracher les yeux à chaque fois!!!
Encore merci pour tes explications!:):)
je vais regarder ça et je reviens..
:):)
bonsoir lEprofSonDkon !:)
j'ai trouvé ça pour l'instant mais je ne sais pas si je suis dans la bonne voie!
je vais analyser ta ligne echo pour bien la comprendre! c'est un peu comme quand on veut changer notre prompt
WOW je ne pensais pas pouvoir comprendre quelque chose à tout ça mais avec ton aide les idées
deviennent de plus en plus claires! ! MERCIII!!!!!
estcequepourlesbalisescestmieux? j'ai peur pour tes yeux!!!
j'ai trouvé ça pour l'instant mais je ne sais pas si je suis dans la bonne voie!
je vais analyser ta ligne echo pour bien la comprendre! c'est un peu comme quand on veut changer notre prompt
#!/bin/sh
#1- effacer l'écran
#2- afficher l'en-tête
#3- à chaque tour de boucle, il faut positionner le curseur à la ligne 2 colonne 0
# tput cup X Y si je ne veux pas qu'il soit trop détaché je pourrais mettre 1 0
if [ "$num_lignes" -ge 1 -a "$num_lignes" -le 25 2>/dev/null ]; then
clear
ps -o user,pid,%cpu,%mem,cputime,comm | head -n 1
while [ 1 ]; do
tput cup 2 0
ps -o user=,pid=,%cpu=,%mem=,cputime=,comm= | head -n "$num_lignes"
sleep 1
done
exit 0
fi
WOW je ne pensais pas pouvoir comprendre quelque chose à tout ça mais avec ton aide les idées
deviennent de plus en plus claires! ! MERCIII!!!!!
estcequepourlesbalisescestmieux? j'ai peur pour tes yeux!!!
si l'énoncé demande des séquences CSI,
il ne faut pas envoyer les erreurs de test vers /dev/null.
mais, est-ce que ça ne pourrait pas être aussi simple que de nettoyer l'écran à chaque boucle, et en renvoyant le curseur tout en haut ?
finalement, on s'en fout de l'en-tête, il sera écraser à chaque fois, tant pis pour lui.
ou bien faut-il ne pas nettoyer le terminal ?
alors, il faut connaître le nombre de lignes produit par
il n'est pas dit dans l'énoncé que le nombre de lignes doit être restreint, mais il doit l'être par rapport au terminal.
je spoile un peu, mais là, je ne sais pas comment expliquer sans te montrer, donc autant te montrer sans expliquer; cela t'es laissé comme exercice supplémentaire.
heu, non.
la balise code "entrante", c'est
et entre les deux, tu mets le code.
il y a un bouton, à côté des boutons [B] [ I ] [S], et une flèche pour choisir le langage.
tputne sera pas accepté.
il ne faut pas envoyer les erreurs de test vers /dev/null.
mais, est-ce que ça ne pourrait pas être aussi simple que de nettoyer l'écran à chaque boucle, et en renvoyant le curseur tout en haut ?
finalement, on s'en fout de l'en-tête, il sera écraser à chaque fois, tant pis pour lui.
while true do printf '"CSI sequence" à trouver' ps -o user,pid,%cpu,%mem,cputime,comm sleep 1 done
ou bien faut-il ne pas nettoyer le terminal ?
alors, il faut connaître le nombre de lignes produit par
ps!
il n'est pas dit dans l'énoncé que le nombre de lignes doit être restreint, mais il doit l'être par rapport au terminal.
unset nbL; while true ; do nbL=$(ps x --sort -%cpu -o user,pid,%cpu,%mem,cputime,comm | head -n $LINES | tee -a /dev/tty | wc -l); sleep 1; printf '"CSI sequence" à trouver' $nbL; done;}
je spoile un peu, mais là, je ne sais pas comment expliquer sans te montrer, donc autant te montrer sans expliquer; cela t'es laissé comme exercice supplémentaire.
heu, non.
la balise code "entrante", c'est
<code sh>(sh pour du code shell), et la balise code "fermante", c'est </code>,
et entre les deux, tu mets le code.
il y a un bouton, à côté des boutons [B] [ I ] [S], et une flèche pour choisir le langage.
merci beaucoup IEprofSonDkon ! :)
je vais voir si je vais avoir le temps de me pencher un peu plus sur cette question demain
j'en ai une autre à faire et toutes les explications des démarches
mais en passant j'ai trouvé
je pense que ça fait ce que je cherche mais je ne réussi pas à être sûr de ce que je vois...
je vais me coucher mon cerveau est mort!
c'est un vrais plaisir ! apprend plein de choses... j'aurais aimé avoir plus de temps mais bon!
Merci encore pour ton aide ! :):)
tes yeux vont mieux se reposer!!! :):)
je vais voir si je vais avoir le temps de me pencher un peu plus sur cette question demain
j'en ai une autre à faire et toutes les explications des démarches
mais en passant j'ai trouvé
\033[H et \033[J
je pense que ça fait ce que je cherche mais je ne réussi pas à être sûr de ce que je vois...
je vais me coucher mon cerveau est mort!
c'est un vrais plaisir ! apprend plein de choses... j'aurais aimé avoir plus de temps mais bon!
Merci encore pour ton aide ! :):)
tes yeux vont mieux se reposer!!! :):)
ALLÔ lEprofSonDkon !
je pense que la nuit porte conseil! je pense avoir trouvé....
\033[1;0H je vais peut-être rajouter quelque comme le clear... à voir je vais tester
Merci encore!!! :):) tu m'as vraiment mise sur la bonne voie!
je pense que la nuit porte conseil! je pense avoir trouvé....
\033[1;0H je vais peut-être rajouter quelque comme le clear... à voir je vais tester
Merci encore!!! :):) tu m'as vraiment mise sur la bonne voie!
#!/bin/sh
num_lignes="$1"
if [ "$num_lignes" -ge 1 -a "$num_lignes" -le 25 2>/dev/null ]; then
clear
while [ 1 ]; do
affiche=$(ps -o user=,pid=,%cpu=,%mem=,cputime=,comm= | head -n "$num_lignes")
echo "\033[1;0H$affiche"
sleep 1
done
exit 0
fi
non, ce n'est pas ça.
Move cursor to beginning of the line, N lines up (default 1)
désolé, je n'avais pas vu ton message précédent.
\033[n;mHplace le curseur à la ligne
ndepuis la ligne 1 du terminal, ça ne déplace pas le curseur de
nlignes vers le haut, c'est-à-dire du nombre de lignes affichées.
Move cursor to beginning of the line, N lines up (default 1)
désolé, je n'avais pas vu ton message précédent.
Bonjour IEprofSonDkon!
Désolée pour le silence !!! je n'avais pas d'internet où j'étais!
Merci pour la réponse! Finalement, j'ai fait le mauvais choix... bon..
Mais il y a-t-il un moyen pour tester si ça se passe bien? parce que à part de regarder l'écran qui rafraîchi tous les 1 seconde et qui reste à la même place, je ne savais pas si c'était bon ou non ce qui était en train de ce passer
En tout cas, tout est rendu, donc c'est vraiment juste pour curiosité personnelle!:)
C'est un sujet que j'aurai bien aimer approfondir un peu plus
Merci encore et encore pour ton aide précieux!! :):)
Je vais attendre un peu pour mettre résolu. Si tu as une suggestion pour les tests :)
Merci et bonne journée! :):)
Désolée pour le silence !!! je n'avais pas d'internet où j'étais!
Merci pour la réponse! Finalement, j'ai fait le mauvais choix... bon..
Mais il y a-t-il un moyen pour tester si ça se passe bien? parce que à part de regarder l'écran qui rafraîchi tous les 1 seconde et qui reste à la même place, je ne savais pas si c'était bon ou non ce qui était en train de ce passer
En tout cas, tout est rendu, donc c'est vraiment juste pour curiosité personnelle!:)
C'est un sujet que j'aurai bien aimer approfondir un peu plus
Merci encore et encore pour ton aide précieux!! :):)
Je vais attendre un peu pour mettre résolu. Si tu as une suggestion pour les tests :)
Merci et bonne journée! :):)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
Et la commande watch, ça ne ferait pas l'affaire ?
Et la commande watch, ça ne ferait pas l'affaire ?
watch -t -d "ps x --sort -%cpu -o user,pid,%cpu,%mem,cputime,comm | head -n 5"
Bonjour sipe31!
Bon! je pense que mon script pour cette question est complètement raté!
Mais bon, au moins j'ai appris des choses! :) surtout celles à ne pas faire Haha!
Je l'avais regardé le man pourtant c'est pour ça que je me posais la question .
Je vais relire les tout... en prenant le temps de traduire un peu certains passages... l'anglais ce n'est pas ma force !:)
Merci encore et désolée aussi pour se silence prolongé! Pas d'internet.. pas de cellulaire ...! ça fait du bien de temps en temps!
Bonne journée :)
Bon! je pense que mon script pour cette question est complètement raté!
Mais bon, au moins j'ai appris des choses! :) surtout celles à ne pas faire Haha!
Je l'avais regardé le man pourtant c'est pour ça que je me posais la question .
Je vais relire les tout... en prenant le temps de traduire un peu certains passages... l'anglais ce n'est pas ma force !:)
Merci encore et désolée aussi pour se silence prolongé! Pas d'internet.. pas de cellulaire ...! ça fait du bien de temps en temps!
Bonne journée :)