Как изящно справляться с нехваткой памяти в скриптах оболочки - PullRequest
11 голосов
/ 26 июня 2019

Есть ли способ изящной обработки условий нехватки памяти в сценарии оболочки?

$ cat test.sh
#!/bin/sh
i=asdf
while true; do
  i="$i $i"
done
$ bash test.sh
test.sh: xrealloc: cannot allocate 18446744072098939008 bytes

Многие языки программирования позволяют обрабатывать исключения из нехватки памяти с помощью простых конструкций try-catch.Можно ли корректно обрабатывать условия нехватки памяти в сценариях оболочки / Bash?Как?

Можно ли либо освободить временные буферы и попытаться продолжить выполнение, либо выполнить некоторую настраиваемую обработку ошибок (состояние сохранения) и выйти с ошибкой?

1 Ответ

0 голосов
/ 12 июля 2019

Не то, чтобы я знал. Вместо этого, когда вы сталкиваетесь с проблемой, подобной этой, обычный подход заключается в повышении пределов с помощью ulimit.

ulimit -m N # for the heap
ulimit -s N # for the stack

Тем не менее, чтобы программно обнаружить его, вам нужно выполнить функциональность, аналогичную функции strace, и наблюдать за ENOMEM.

...