Bonjour à tous,

Le but de ma démarche est d'essayer d'extraire de la commande TOP les processus actifs (dont le %CPU N'EST PAS 0,0) et de les ressortir sous la forme toute simple NOM %CPU

(la raison est simplement de m'exercer aux expressions regulieres, à awk sed grep et companie et aussi de me créer des petits fichiers log avec les ressources CPU mémoire et processus)

voici un extrait de top pour voir sur quoi on travaille:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
Tasks: 122 total,   1 running, 121 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0,3 us,  0,3 sy,  0,0 ni, 99,4 id,  0,0 wa,  0,0 hi,  0,0 si,  0,0 st
KiB Mem:  16415356 total,  2191020 used, 14224336 free,   152324 buffers
KiB Swap: 15624188 total,        0 used, 15624188 free,   401636 cached
 
  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
 4535 cpas      20   0 1568m 1,2g 1,2g S   3,7  7,6  99:32.51 VBoxHeadless
    1 root      20   0 10648  836  704 S   0,0  0,0   0:01.74 init
    2 root      20   0     0    0    0 S   0,0  0,0   0:00.00 kthreadd
    3 root      20   0     0    0    0 S   0,0  0,0   0:02.49 ksoftirqd/0
j'ai donc essayé ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
top -n 1 | awk '$10!~/(0,0)/ {print $13, $10;}'
 
 
résultat:
init 0,0
kthreadd 0,0
ksoftirqd/0 0,0
migration/0 0,0
watchdog/0 0,0
migration/1 0,0
ksoftirqd/1 0,0
watchdog/1 0,0
qui teste si la colonne 10 (%CPU) EST '0,0' et si c'est le cas affiche en sortie les colonnes 13 et 10 (nom et %CPU)

Ceci fonctionne assez bien mais je ne parviens pas a sortir l'inverse, càd de me sortir ce qui N'EST PAS '0,0'

là je bloque, je commence à m'interesser aux lookaround mais j'ai du mal...

je parviens à le faire avec ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
top -n 1 | awk '$10~/(0,0)/ {print $13, $10;}'
mais j'aimerais nier l'expression régulière et pas l'opérateur de la commande awk

Quelqu'un pourrait m'aider avec ceci ?



J'ai également un autre soucis:

Au fil de mes tests je suis arrivé à taper la commande suivante calquée sur la précédente mais qui ne fonctionne pas systématiquement...
Là je me gratte la tête mais je ne comprends pas

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
root@svr66:~# top -n 1 | awk '$3~/(cpa)/ {print $3, $13, $10;}'
cpas VBoxHeadless 6,4
root@svr66:~# top -n 1 | awk '$3~/(cpa)/ {print $3, $13, $10;}'
cpas VBoxHeadless 6,4
root@svr66:~# top -n 1 | awk '$3~/(cpa)/ {print $3, $13, $10;}'
cpas VBoxHeadless 6,4
root@svr66:~# top -n 1 | awk '$3~/(cpa)/ {print $3, $13, $10;}'
root@svr66:~# top -n 1 | awk '$3~/(cpa)/ {print $3, $13, $10;}'
root@svr66:~# top -n 1 | awk '$3~/(cpa)/ {print $3, $13, $10;}'
cpas VBoxHeadless 6,4
root@svr66:~# top -n 1 | awk '$3~/(cpa)/ {print $3, $13, $10;}'
cpas VBoxHeadless 6,4
root@svr66:~# top -n 1 | awk '$3~/(cpa)/ {print $3, $13, $10;}'
root@svr66:~# top -n 1 | awk '$3~/(cpa)/ {print $3, $13, $10;}'
root@svr66:~# top -n 1 | awk '$3~/(cpa)/ {print $3, $13, $10;}'
root@svr66:~# top -n 1 | awk '$3~/(cpa)/ {print $3, $13, $10;}'
cpas VBoxHeadless 6,4
root@svr66:~# top -n 1 | awk '$3~/(cpa)/ {print $3, $13, $10;}'
root@svr66:~# top -n 1 | awk '$3~/(cpa)/ {print $3, $13, $10;}'
root@svr66:~# top -n 1 | awk '$3~/(cpa)/ {print $3, $13, $10;}'
root@svr66:~# top -n 1 | awk '$3~/(cpa)/ {print $3, $13, $10;}'
cpas VBoxHeadless 6,4
root@svr66:~#
Comme vous pourrez le constater la commande filtre bien les processus appartenant au user cpas.
En fait un seul processus, qui est une machine virtuelle sous virtualbox, en fonction
Le problème c'est que parfois, vous l'aurez constaté, la commande ne retourne rien alors que le processus est toujours bien actif.
Je ne spamme pas la commande et le fait du résultat ou d'absence de résultat me parait aléatoire...

Quelqu'un aurait une explication à cette question bonus ?


merci d'avance

olivier