Другая опция является передозировкой:
od -t x1 FILE
или
od -x FILE
od
имеет много опций для подстройки.
Вообще говоря, я не думаю, что Вы можете, к сожалению. (Некоторые операционные системы могли бы предусмотреть его, но я не знаю о тех, я знаю поддержку этого.)
Справочный документ для пределов ресурса: getrlimit
от POSIX 2008.
Возьмите, например, предел ЦП RLIMIT_CPU
.
SIGXCPU
SIGKILL
Если Вы можете wait()
на Вашей программе Вы могли сказать, была ли она уничтожена SIGXCPU
. Но Вы не могли дифференцировать a SIGKILL
диспетчеризированный для нарушения жесткого предела от простого уничтожения снаружи. Кроме того, если программа обрабатывает XCPU
, Вы не будете даже видеть это снаружи.
То же самое для RLIMIT_FSIZE
. Вы видите SIGXFSZ
от wait()
состояние, если программа не обрабатывает его. Но после того как предел размера файла превышен, единственная вещь, которая происходит, состоит в том, что дальнейший ввод-вывод, который пытается протестировать тот предел снова, просто получит EFBIG
- это будет обработано (или нет, к сожалению) программой внутренне. Если программа обрабатывает SIGXFSZ
, то же как выше - Вы не будете знать об этом.
RLIMIT_NOFILE
? Ну, Вы даже не получаете сигнал. open
и друзья просто возвращаются EMFILE
к программе. Это иначе не побеспокоено, таким образом, это перестанет работать (или не) в том, какой бы ни путь это было кодировано для сбоя в той ситуации.
RLIMIT_STACK
? Старый добрый SIGSEGV
, не может быть отличен от счета других причин стать поставленным. (Вы будете знать это, именно это уничтожил процесс хотя, от wait
состояние.)
RLIMIT_AS
и RLIMIT_DATA
просто сделает malloc()
и немногие другие начинают перестать работать (или получить SIGSEGV
если предел AS поражен при попытке расширить стек на Linux). Если программа не будет очень хорошо записана, она, вероятно, перестанет работать справедливо случайным образом в той точке.
Таким образом короче говоря, обычно, отказы или не явно отличаются от других смертельных причин процесса, таким образом, Вы не можете быть уверены, или можете быть обработаны полностью из программы, в этом случае, она решает if/when/how, она продолжается, не Вы с внешней стороны.
Лучшее, которое можно сделать насколько я знаю, пишут немного кода, что ветвления программы, ожидает на нем, и:
SIGXCPU
и SIGXFSZ
(AFAIK, те сигналы будут только сгенерированы ОС для предельных проблем ресурса). В зависимости от Ваших точных потребностей Вы могли принять это SIGKILL
и SIGSEGV
были также связаны с пределами ресурса, но это - что-то вроде фрагмента.getrusage(RUSAGE_CHILDREN,...)
на Вашей реализации для получения подсказки о других.Определенные для ОС средства могли бы существовать для помощи здесь (возможно вещи как ptrace
на Linux или Солярисе dtrace
), или возможно методы типа отладчика, но это будет еще более связанным с Вашей определенной реализацией.
(Я надеюсь, что кто-то еще ответит некоторой волшебной вещью, о которой я полностью не знаю.)
Я в настоящее время делаю некоторую работу над той же проблемой. Я смог иметь частичное решение его. Я использовал аудит susbsystem. Можно отследить работу над [1].
malloc
но к сожалению это не решает проблему памяти в целом, причина в целом, это о системном вызовеbrk
(действительно ли я прав?). – Grzegorz Wierzowiecki 26.10.2011, 22:25LD_PRELOAD
луг это - граница для Вашего "не изменения процесса" ограничение, и это поможет немного, но не действительно -malloc
,brk
,sbrk
иmmap
перестанет работать сENOMEM
, точно, как будто Вы действительно были в низкой ситуации с памятью (но далеко ниже пределов памяти). Ограничение по времениRLIMIT_CPU
, Я не знаю о тактовом стеной ограничении по времени. – Mat 26.10.2011, 22:33brk
. Как я вижу, требование 'программа не обрабатывает сигналы X, Y, Z...', решит проблемы SIGXCPU, SIGXFSZ, SIGSEGV, благодаря waitpid (Если я буду неправ, исправьте меня). – Grzegorz Wierzowiecki 29.10.2011, 13:30brk
. Как я вижу, требование 'программа не обрабатывает сигналы X, Y, Z...', решит проблемы SIGXCPU, SIGXFSZ, SIGSEGV, благодаря waitpid.Я прав? – Grzegorz Wierzowiecki 29.10.2011, 13:46