Jak w BASH zapisać wartość parametru nice dla danego procesu do zmiennej ?
Na przykładzie poniżej: Jak pobrać wartość parametru nice dla procesu pulseaudio?
Wartość ta wynosi tu -11 i tą wartość chcę automatycznie pobrać do zmiennej.
Trochę za szybko ogłosiłem pełen sukces
Ten sposób działa poprawnie, gdy jest tylko jeden proces spełniający ten warunek. Gdy jest ich więcej , to robi się problem.
Napiszę co konkretnie chcę osiągnąć:
Mam kilka (2-3) procesy o nazwie terminal.exe (umieszczone w różnych katalogach) i o różnych wartościach parametru NICE.
Chcę aby w przypadku procesu z wartością NICE=0 priorytet tego procesu został zmieniony na -2. W pozostałych przypadkach nic nie ma być robione.
Mam obecnie skrypt o nazwie renice-terminal-if-2.sh i zawartości jak poniżej:
#!/bin/bash
x=$(ps -ho ni -p $(pidof terminal.exe))
echo Info_WartośćNICE=$x
echo Info_ID_terminal.exe= $(pidof terminal.exe)
if [ $x = 0 ]; then sudo renice -2 $(pidof terminal.exe);
else echo "Nice było inne niż 0";
fi
Dla pojedynczego procesu terminal.exe skrypt działa poprawnie.
Gdy jest więcej procesów, np. 3 procesy, jak poniżej:
16777 z nice=0
16500 z nice=0
16359 z nice=-8
to jest błąd jak poniżej:
./renice-terminal-if-2.sh
Info_WartośćNICE= -8 0 0
Info_ID_terminal.exe= 16777 16500 16359
./renice-terminal-if-2.sh: linia 7: [: za dużo argumentów
Nice było inne niż 0
Trzeba to upakować w pętlę, poniższy przykład działa zarówno dla jednego jak i dla wielu procesów:
#!/bin/bash
y=$(pidof terminal.exe)
for t in $y
do
x=$(ps -ho ni -p $t)
echo "pid procesu: $t, nice procesu: $x"
if [[ $((x)) == 0 ]]
then
echo "Zmieniam nice na -2"
sudo renice -2 $t
fi
done