Наверное, нельзя. Логика
cpulimit
довольно проста, она занимает pid процесса и просто посылает свой сигнал kill -STOP $ PID
, затем kill -CONT $ PID
, и снова, и снова, и снова, и снова......
И измерение загрузки ЦП для вычисления задержки между STOP и CONT.
В вашем случае pstree
сложного bash-script займет N * x экранов консоли.
Я могу предложить вам еще один метод понижения загрузки процессора любого bash-скрипта или даже двоичного исполняемого файла.
1) приятно
- процесс принятия и увеличения или уменьшения приоритета с -20 (Наивысший приоритет) до 20 (Наименьший приоритет). Вероятно, в слишком низком диапасоне, именно поэтому, появляются ещё два утила и крючки ядра:
2) ionice
- может быть, это второе поколение nice
. Можно разделить процессы по приоритету от 0 (наименьший приоритет) до 7 (наивысший приоритет). Кроме того, можно разделить процессы по классам, в режиме реального времени (самый высокий), наилучшие усилия
(средний), в режиме ожидания (самый низкий) и нет (по умолчанию).
3) chrt
- самая высокая вещь, которую я когда-либо встречал, она похожа на cpulimit
своей силой и доминированием на процессе. Здесь также можно соответствовать классам приоритета, простоя
, реального времени
, fifo
, пакета
и т.д. И диапасон приоритетов очень большой, от 1 до 99.
Например, вы можете запустить один огромный процесс с помощью chrt -r -p 99 process
- и он съест все ваши ресурсы.
Точно так же любой огромный демон может работать в "фоновом режиме" с процессом chrt -r -p 0
- он будет ждать всех остальных, пока ресурсы системы будут заняты.
В любом случае, я настоятельно рекомендую вам прочитать man chrt
и man ionice
перед началом работы.
Например, я использую rtorrent
для p2p. Это наименее приоритетная задача для моей системы, тогда я запускаю ее таким образом:
nice -n 20 chrt -i 0 ionice -c3 /usr/bin/rtorrent
Или, вы можете взять крючки и хаки путь. И напиши свой cpulimit_wrapper сценарий. Например:
# cat bash_script.sh
#!/bin/bash
while sleep 0; do
find /
dd if=/dev/random of=/tmp/random.bin bs=1M count=1000
done
плюс
# cat cpulimit.sh
#!/bin/bash
TARGET=$1
[ -z "$TARGET" ] && echo "Usage bash cpulimit.sh command" && exit 1
cpulimit -l 1 bash $TARGET
while sleep 0;do
lsof -n -t $TARGET | xargs pstree -p | sed -e 's/(/(\n/g' | sed -e 's/)/\n)/g' | egrep -v '\(|\)' | while read i; do
echo $i;
cpulimit -l 1 -b -p $i;
done
done
-121--89280- Я думаю, что он не работает, когда один сервер является вашим локальным ПК. Я примерил тест сервера к серверу, он работает нормально.
-121--289514- Кали, как и Debian, является полностью открытым исходным кодом. Однако существует много инструментов с закрытым исходным кодом, которые могут представлять большой интерес для пользователя Kali, и, как таковые, они были доступны через несвободное
репо. Если вы не хотите использовать программное обеспечение с закрытым исходным кодом в вашем Kali distro, отключите это репо.
Если вы просто пользователь Kali, то наличие программного обеспечения с закрытым исходным кодом на вашем компьютере не должно быть проблемой. Проблемы возникают, если вы хотите построить производную Kali и распространить ее; в этом случае вы должны быть полностью осведомлены об ограничениях при перераспределении каждой части программного обеспечения с закрытым исходным кодом.
Pude resolverlo usando esto:
[ -f $dir/_$file ]
o
if [ -f $dir/_$file ]; then
para simplemente verificar la existencia de un archivo con el prefijo particular. Bastante simple, lo hice más difícil de lo necesario.
A veces, no sé si usar o no comillas cuando hago referencia a variables.
Dado un archivo que se expande por$filename
:
if [[ -f "dir/_${filename}" ]]; then
echo "The prefixed copy exists."
else
echo "The prefixed copy does not exist."
fi
Estoy viendo las respuestas, pero también puse mi respuesta. Tal vez sea útil para alguien.
#!/bin/sh
filename="file"
directory="bash_test"
if [ "$filename" = "$(basename $directory/_$filename|tr -d ^_)" ]
then
echo "Prefix exists."
else
echo "Prefix not exists."
fi
Проверка с -eq
завершится неудачно, так как аргументы не являются целыми числами(-eq
проверки на арифметическую эквивалентность двух целых чисел ).
Вероятно, вы захотите проверить, занято ли подчеркнутое имя чем-то другим, а не просто обычным файлом.
Вы можете сделать это с помощью
if [ -e "$dir/_$file" ]; then
printf 'The name "%s" already exists in directory %s\n' "_$file" "$dir"
fi
Вам потребуется двойная кавычка $dir/_$file
, как я показал выше, или как "$dir"/_"$file"
(, если $dir
и $file
заключены в кавычки ). Это позволяет избежать разделения слов на значения переменных, что, в свою очередь, позволяет избежать синтаксической ошибки времени выполнения, если одна или обе из них по какой-то причине содержат пробельные символы. Это также позволяет избежать вызова генерации имени файла (подстановки )для каталога и имени файла.
Я использовал тест -e
, поскольку полагаю, что вы также хотели бы знать, есть ли, например, каталог с подчеркнутым именем в каталоге $dir
.