|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 349
|
[BASH] Osservare i processi
Salve a tutti,
volevo chiedere un piccolo aiuto. Dovrei creare uno script bash per osservare i processi in esecuzione ed avvisare l'utente se uno di questi supera un tot di percentuale di utilizzo della cpu. Ci sono ovviamente molti modi di farlo e sono arrivato a questo: Codice:
top -b -n 1 | grep 'processo' | grep -v 'grep' | awk '{print $9}'
Codice:
ps -eo %cpu PIDdelprocesso | tail -1
__________________
Kerojam |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
bisogna vedere su che sistema lavori...
io ottengo quello che vuoi con Codice:
ps -eo user,pid,pcpu,args |awk '{if($3>=10) print $0}'
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 349
|
Quote:
WOW ottimo! Grazie. E se dovessi chiedere "vuoi terminare il processo?" ?
__________________
Kerojam |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
Quote:
puoi fare così, tanto sei in uno script mi pare di capire. 1- logghi in un file il risultato di quello sopra (chiamiamo il file "lista") 2- crei una funzioncina all'interno dello script (chiamiamo kill_proc) che conterrà Codice:
kill_proc() {
processo=$1
echo `grep $processo lista`
read -p "Vuoi killare il processo? [Y][N]" yn
case $yn in
[Yy]) kill $processo;return 0;;
[Nn]) return 0;;
esac
}
Codice:
for processo in `nawk '{print $2}' lista `;do kill_proc $processo;done
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] Ultima modifica di zuper : 03-08-2010 alle 22:41. |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 349
|
Quote:
ora... dopo un bel po' di ore passate a cercare, sto tentando di creare un array a due dimensioni in modo da chiamare la funzione kill_proc con $pid e $nomeprocesso. Quindi: PID NOME 1 comando1 2 comando3 11 comando2 Poi lo scorrerei con il for e passerei gli argomenti alla funzione, senza fare il grep ogni volta. Penso sia più efficente no? Tuttavia sto impazzendo per farlo
__________________
Kerojam |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Fidenza(pr) da Trento
Messaggi: 27479
|
@ zuper: come mai uusi la funzione read per mostrare la scelta e non un print?
__________________
"Visti da vicino siamo tutti strani..." ~|~ What Defines a Community? ~|~ Thread eMule Ufficiale ~|~ Online Armor in Italiano ~|~ Regole di Sezione ~|► Guida a PrivateFirewall
|
|
|
|
|
|
#8 | |||
|
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
Quote:
hai risolto alla fine per il passaggio del comando? se no invece del for processo...prova con Codice:
while read user pid pcpu args;do kill_proc $pid $args;done < lista Codice:
kill_proc() {
pid=$1
processo=$2
# echo `grep $processo lista`
echo $1 $2
read -p "Vuoi killare il processo? [Y][N]" yn
case $yn in
[Yy]) kill $pid;return 0;;
[Nn]) return 0;;
esac
}
Quote:
Quote:
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] |
|||
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 349
|
Quote:
Il tuo codice mi da errore: "nessun file o directory". Siamo sicuri che la read più il < lista sia giusto? lista è una variabile per me, come faccio a farla accettare come file?
__________________
Kerojam |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 349
|
Come non detto ho fatto così
Quote:
edit: ho creato un for, modificando l'IFS ('\n') ed, al suo interno ho trasformato la linea letta in array, passando la prima e la terza colonna della linea. Risolto. Penso sia pure elegante ed efficente
__________________
Kerojam Ultima modifica di Futuregames : 18-08-2010 alle 13:09. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:28.





















