ulimit возвращает 0 в качестве состояния выхода ... как получить 1, если процесс убит? - PullRequest
0 голосов
/ 21 июля 2011

Я пишу сценарий оболочки, который вызывает некоторые программы, которые могут использовать все ресурсы и эффективно убить машину.Я должен предотвратить это.

Моя идея состояла в том, чтобы использовать ulimit для установки ограничений на ресурсы (впервые я действительно нуждался в использовании ulimit на практике), но я был немного удивлен, что статус выходаЧисло завершенных процессов равно 0.

Как мои сценарии оболочки могут ограничивать ресурсы и обнаруживать процесс, убиваемый оболочкой из-за превышения этого ограничения?

Я использую bash, но любые комментарии будут стоитьчтение.

1 Ответ

0 голосов
/ 27 августа 2011

Программа, превышающая одно из значений ulimits, будет либо остановлена ​​из-за ошибки (например, из-за файловых дескрипторов, процессов), либо в конечном итоге перехватит сигнал (память, время ЦП).Это означает, что вы просто проверяете состояние выхода рассматриваемой программы.

ulimit ...
program
xs=$?
case $xs in
 0) ;; # all fine
 *) if [ $xs -gt 127 ]; then
       echo caught a signal...
    else
       echo some error...
    fi
esac
...