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:
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 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
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)
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
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:
mais j'aimerais nier l'expression régulière et pas l'opérateur de la commande awk
Code : Sélectionner tout - Visualiser dans une fenêtre à part top -n 1 | awk '$10~/(0,0)/ {print $13, $10;}'
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
Comme vous pourrez le constater la commande filtre bien les processus appartenant au user cpas.
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:~#
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
Partager