Нижеприведенная команда убьет процесс, использующий больше всего памяти на компьютере. Это то, что вы искали, или это должен быть процесс пользователя, который использует больше всего памяти (который может быть не самым большим нарушителем и причиной нехватки памяти)?
#!/bin/bash
free=`awk '/^Mem/ {print $3}' <(free -m)`
psout=`ps axo pid,args,pmem,rss,vsz --sort -pmem,-rss,-vsz | head -2`
pid=`echo $psout | cut -d " " -f 6`
if (( $free < 1 )); then
kill -9 $pid
fi;
Edit: Теперь я вижу ваши рассуждения, попытаюсь изменить приведенный выше код.
Edit 2: Поскольку мне не нужно завершать этот проект сегодня, позвольте мне направить вас на правильный путь. Вы можете скачать smem (скрипт на python) по следующему URL: https://www.selenic.com/smem/download/
Запуск от имени root с опцией -u даст вам общее количество памяти, используемой каждым пользователем. Соберите это в массив, отсортируйте по используемой памяти, затем просто добавьте -u к команде ps выше, чтобы убить худшего нарушителя этого пользователя.
Я получил эту ошибку только потому, что по ошибке использовал print вместо echo в bash:
print "abcd123" | perl -e 'myscript' #causes error
Решение было использовать echo, я просто запутал print / echo путем смешивания языков
echo "abcd123" | perl -e 'myscript' #is fine
printf "abcd123" | perl -e 'myscript' #is fine too, "printf" not print
Это связано с изменением, описанным в "Perl Changes for 5.22" , но предложенное там решение экранирования '{' частоне подходит, в зависимости по предполагаемой логике регулярного выражения.
Это предупреждение появляется, когда регулярное выражение использует конструкцию типа "{,20}", которая исторически в некоторыхДРУГИХреализациях регулярных выражений интерпретировалась как эквивалентная "{0,20}", т.е. серии предыдущего атома от нуля до двадцати раз». Во всех случаях, когда целью является количественная оценка повторения, это нарушается во всех современных версиях Perl, потому что интерпретация '{', за которой следует что-либо, кроме числа, как буквального '{', была явно задокументирована, начиная с версии 5.8. Выход из левой фигурной скобки в случае предполагаемого квантификатора не является исправлением; добавление подразумеваемого нуля.
Это было исправлено в 2016 -04 -01 (после automake 1.15, до 1.15.1 ).
966 2016-04-01 Paul Eggert <eggert@cs.ucla.edu>
967
968 automake: port to Perl 5.22 and later
969
970 Without this change, Perl 5.22 complains "Unescaped left brace in
971 regex is deprecated" and this is planned to become a hard error in
972 Perl 5.26. See:
973 http://search.cpan.org/dist/perl-5.22.0/pod/perldelta.pod#A_literal_%22{%22_should_now_be_escaped_in_a_pattern
974 * bin/automake.in (substitute_ac_subst_variables): Escape left brace.