UTNianos

Versión completa: [Sistemas Operativos] TP Michelle - Modulo limitaciones
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola, me estoy rompiendo la cabeza mal con este modulo y la verdad no se me ocurren mas ideas para lograr lo que tengo que hacer.
El problema es este: hay que determinar el consumo de CPU y Memoria de los procesos del usuario, averiguando encontre que para esto necesito este comando:
ps -u
Muestra un par de cosas, pero me interesa la 3º y 4º columna que indican el % de consumo de cada proceso. Estos num son de la sig forma: 0.1 1.2 0.2 etc, es decir con decimales.
Bueno, haciendo un par de flasheadas consigo meter esta 3º y 4º columna en dos array (uno para CPU y otro para Memoria), solo deberia sumar los elementos de cada array y asi obtendria el total de consumo de cada cosa. He aqui el problema... Bash no usa aritmetica con pto flotante! Es decir el contador queda como 0.0+0.1+1.2. Ni usando let puedo hacer que se sumen, menos haciendo un declare -i al principio.
Alguien puede orientarme?
Ya lo arregle con el awk, gracias eh
De nada
apuleyo escribió:Ya lo arregle con el awk, gracias eh

Si te interesa hacer algo mucho más simple, tenés una alternativa a 'ps u'. Es 'ps o campo' donde campo es el campo específico que querés que te tire, por ejemplo 'ps o pcpu' saca por pantalla sólo el consumo de CPU de cada proceso, algo asi:

%CPU
0.3
0.1
0.4

Otros nombres de campos son 'pmem' (no aparece en el man, al menos a mi) y 'comm' que saca el nombre de los procesos activos. La salida la podés redireccionar a un grep inverso para que no te tome %CPU y te tome solo los números, quedaría algo así:

ps o pcpu | grep -v "%CPU"

Asi ya te queda una lista de valores que podés usar para jugar con el 'for', para hacer la sumatoria y demás. Para sumar decimales armate un algoritmo usando 'cut' con el delimitador '.' para sumar los enteros por un lado y los decimales por otro, y cuando la suma de decimales te da mayor que 10, le sumás 1 a los enteros, no se si se entiende. Saludos.
URLs de referencia