 |
n3o |
tanto c'è SPASS...

Registered: Oct 2005
Posts: 134 (0.02 al dì)
Location: Brescia
Corso: Informatica Magistrale
Anno: 1°
Time Online: 1 Day, 19:26:05: [...]
Status: Offline
Edit | Report | IP: Logged |
Ehm, sono riuscito a farlo ma è decisamente complicato...
code: #!/bin/sh
SUM=0
for UID in $(cat /etc/passwd | cut -d : -f 3); do
for PROCSIZE in $(ps alx | tr -s ' ' ' ' | cut -d ' ' -f 4,8 | grep "^$UID" | cut -d ' ' -f 2); do
SUM=$(expr $SUM + $PROCSIZE)
done
echo "Utente $UID : $SUM KB di processi in memoria"
SUM=0
done
Credo di dovervi delle spiegazioni riguardo alla riga più lunga:
- ps alx => stampa tutti i processi in formato lungo
- tr -s ' ' ' ' => comprimo tutti gli spazi contigui in un solo spazio (fondamentale, altrimenti non funziona il cut)
- cut -d ' ' -f 4,8 => estrai la 4^ e l'8^ colonna (che dopo tr sono separate da un solo spazio) che sono l'UID del proprietario e la dimensione (le ho trovate osservando il comportamento dei comandi precedenti, non c'è un manuale su come farlo!)
- grep "^$UID" => cerca l'UID interessato a partire dall'inizio della riga (potrebbe confondersi con la dimensione di un processo)
Ricordo che le colonne ora avranno il formato "0 689" ovvero UID + spazio + SIZE
- cut -d ' ' -f 2=> Una volta ristretto il campo dell'utente estraggo la sola colonna dei SIZE per poi sommarli tutti
Create un nuovo utente e fate girare lo script con esso, altrimenti tutti i processi compaiono di proprietà di root.
Purtroppo avere riscontri precisi è difficile perchè non si riesce a beccare gli esatti processi in esecuzione durante lo script, quindi fare un controllo con ps alx dopo l'esecuzione non ha molto senso!
Come sempre se qualcuno ha una soluzione più semplice ben venga! (testatela prima!!!)
__________________
The answer is blowing in the wind...
Last edited by n3o on 19-07-2007 at 16:35
|