Я подозреваю, что у Вас есть процессор переменной частоты, который установлен на "ondemand" под Debian и "производительность" при Arch.
Можно изменить их непосредственно путем вписывания в новые настройки /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
, использование команды как cpufreq-set
, или GUI как indicator-cpufreq
.
Проблема заключается в обратных кавычках в разделе do ... done
.
При написании сценария оболочки вам не нужно инкапсулировать блоки ( if; then ... fi
, while; do ... done
и т. Д.) В обратные кавычки. Это приводит к тому, что оболочка оценивает содержимое обратных кавычек, а затем выполняет это содержимое. Таким образом, обратные кавычки возвращают число (количество открытых файлов), а затем пытается запустить это число, в результате чего команда не найдена
.
Таким образом, вы хотите:
for i in `ps aux | awk '{print $2}'` ; do lsof -p $i | wc -l ; done
(В вашем цикле обнаружено ``
, что вызвало проблему с помощью подстановки команд, как отмечено val0x00ff и Patrick. Это уже вторая часть о поиске другого способа решения проблемы.)
Можно показать количество файловых скрипторов на процесс, используя lsof
напрямую:
lsof -Fpcn | nawk '
/^p/ { pid=substr($0,2) }
/^c/ { cmd=substr($0,2) }
/^n/ { fd[cmd"["pid"]"]++ }
END { for (cc in fd) printf("%-20s %i\n",cc,fd[cc]) } ' | sort -n -k 2
Это должно работать на большинстве *nix систем с lsof
.
Опция -Fpcn
выводит "machine readable" формат, который помечает каждую строку:
Скрипт awk отслеживает количество файловых дескрипторов с помощью ассоциативного массива (индексированного "command[pid]") и дает дамп массива на END{}
входных данных.
Эти подсчеты FD часто будут отличаться от других методов, заметные ps
или /proc/PID/fd
, потому что lsof
считает больше, чем просто реальные файловые дескрипторы, а файлы отображения памяти, в частности, скорее всего, будут сбрасывать ваши номера для некоторых процессов.
Если вам нужен точный подсчет реальных FD, вам нужно добавить "-d0-9999", чтобы ограничить вывод lsof
только числовыми файловыми дескрипторами. Технически большое число должно быть, по крайней мере, максимальным количеством FD на процесс, возможно, это можно определить с помощью ulimit -n
или getconf OPEN_MAX
, но корень может изменить это. В Linux вы можете проверять лимиты каждого процесса в /proc/PID/limits
, а в качестве верхнего лимита можно использовать /proc/sys/fs/file-nr
.
Другие дешевые и жизнерадостные способы подсчета файловых дескрипторов на Linux-системе с помощью /proc
:
(cd /proc; ls -d [0-9]* ) | while read pid; do set -- /proc/$pid/fd/*; echo $pid $#; done
ps axo "pid" | while [...]