J'ai joué avec le bashrc et l'une des choses que je veux voir à tout moment est mon utilisation du processeur en pourcentage. J'ai décidé de mettre ces données dans ma PS1. Le problème est que pour avoir une estimation précise de l'utilisation de mon processeur, j'ai besoin de faire des opérations qui nécessitent une attente d'au moins 0,5 seconde. Par conséquent, ma nouvelle ligne de commande ne s'affiche qu'à la fin du calcul du processeur, 0,5 seconde plus tard, ce qui est vraiment inacceptable. Pour faire face à cela, j'ai pensé que je pourrais peut-être utiliser un thread pour faire le calcul du processeur et l'afficher uniquement à la fin, mais je ne sais pas comment le faire. L'un des problèmes est que j'affiche d'autres informations après le pourcentage de la CPU, donc je ne sais pas s'il est même possible de retarder l'affichage de la CPU tout en affichant le reste de la ligne de commande. Je pensais que je pourrais peut-être afficher une chaîne temporaire telle que ??.??
puis la remplacer par la valeur réelle mais je ne suis pas sûr de savoir comment le faire car si je tape rapidement les commandes du ??.??
peuvent changer (par exemple en tapant ls 5 fois d'affilée très vite).Comment faire fonctionner une fonction en arrière-plan dans bash/remplacer l'utilisation de texte/CPU
Peut-être y a-t-il une solution encore plus simple à mon problème tel que calculer le pourcentage de CPU d'une autre manière?
Mon pourcentage CPU fonction de calcul:
function cpuf(){
NonIdle=0;Idle=0;Total=0;TotalD=0;Idled=0
NonIdle=$((`cat /proc/stat | awk '/^cpu/{print$2+$3+$4+$7+$8+$9}'` - $NonIdle))
Idle=$((`cat /proc/stat | awk '/^cpu/{print$5+$6}'` - $Idle))
sleep 0.5
NonIdle=$((`cat /proc/stat | awk '/^cpu/{print$2+$3+$4+$7+$8+$9}'` - $NonIdle))
Idle=$((`cat /proc/stat | awk '/^cpu/{print$5+$6}'` - $Idle))
Total=$((Idle+NonIdle))
CPU=$(((Total-Idle)/Total))
echo `echo "scale=2;($Total*100-$Idle*100)/$Total" | bc -l`
}
Comment je l'appelle dans le bashrc:
alias cpu="cpuf"
PS1+="(\[${MAGENTA}\]CPU $(cpu)%"
Avez-vous envisagé stocker le résultat dans un fichier, comme '/ tmp/cpu.log', gardez le' cpuf' r unning comme un travail (en appelant 'cpuf &' avant de créer l'alias), et en changeant 'alias cpu =" cat /tmp/cpu.log "'? – pah
Pourquoi utilisez-vous 'cat'? 'awk' prend un nom de fichier en tant que paramètre. Les processus enfants multiples dans votre fonction ne feront pas beaucoup pour l'efficacité de votre processeur. – cdarke
Threadp votre solution semble être une très bonne idée, je vais vérifier dans la matinée et poster une solution si elle me va, merci. cdarke, tu as raison, je vais changer ça aussi. – PiggyGenius