Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: yMk369 en 15 Agosto 2015, 02:42 am



Título: [Bash] Matar proceso según la memoria libre
Publicado por: yMk369 en 15 Agosto 2015, 02:42 am
Buen día a todos,

Estoy haciendo un script para matar un proceso dependiendo de la memoria libre el código es el siguiente:

Código:

#!/bin/bash

var1= free -m |awk 'NR == 2'| awk '{print $3}'
var2= ps aux | grep '/opt/skype/skype' | grep -v grep | awk '{print $2}'

while true;
do
     if [ $var1 > 5000 ]; then
         echo "La memoria se ha excedido cerrando porcesos"
         kill -9 $var2
     break
     else
     echo "La memoria aun es estable $var1"
     fi
done

pero... ¿por que no mejor en lugar de declarar la variable para luego matar  kill -9 $var2, mejor ejecutar el comando ps aux | grep '/opt/skype/skype' | grep -v grep | awk '{print $2}' | xargs kill que mataría el proceso directamente?

si ese fuera el caso mejor usaría pkill skype que mataría dicho proceso, pero lo que yo quiero saber o supongo que es el problema es algo así como el manejo de números enteros, por que al hacer una condición ejemplo: $var1 > 5000 no hay resultado, supongo que estoy comparando diferentes tipos de valores, ¿que puedo hacer? ¿como puedo pasar entonces estos valores a valores enteros?

Hacer notar que me estoy iniciando en Bash

De antemano agradezco su ayuda, saludos.


Título: Re: [Bash] Matar proceso según la memoria libre
Publicado por: yMk369 en 23 Agosto 2015, 00:06 am
Hola, pues ya tengo el código corriendo al 100, tomar en cuenta que es un while true por lo tanto corre infinitamente, que es lo que necesito por que en firefox tengo corriendo Kibana, y esta revisando bastantes logs por lo tanto consume mucha memoria, por supuesto tambien libero la memoria cache en /proc/sys/vm/drop_caches  pero no es suficiente, les dejo el codigo para que lo analicen.

Código:
#!/bin/bash

while true;
do

var1=$( free -m |awk 'NR==2 {print $3}' )
varl=$( free -m |awk 'NR == 2'| awk '{print $4}' )
var2=$( ps aux | grep '/usr/lib/firefox/firefox' | grep -v grep | awk '{print $2}' )

    if [ $var1 -gt 3000 ]; then
        echo "La memoria se ha excedido cerrando Firefox"
        kill -9 $var2
        echo "Comprobando si Firefox aun esta abierto"
        sleep 5
        var3=$( pidof firefox )

        let var4=$var3+0

                if [ $var4 -gt 0 ]; then

                         echo "Firefox esta abierto, lo tendremos que cerrar"
                         pkill -9 firefox
                else

                    echo "Firefox no esta abierto"

                fi

        echo "esperando 5 segundos para volver a ejecutar la aplicacion"
        sleep 5
        nohup /usr/lib/firefox/firefox &
    else
    echo "La memoria aun es estable, el espacio usado es de $var1 MB y libre de $varl MB"
    fi

sleep 1

done