trap "$instructions" SIGSEGV
ловит ошибки сегментации в самой оболочке.
Если вы запускаете свой скрипт под set -e
, вы можете поставить ловушку на EXIT
(или 0
). Он будет выполнен, когда ваш скрипт завершит работу (либо из-за команды, возвращающей ненулевой статус, либо из-за явного вызова exit
или из-за падения конца скрипта). Чтобы проверить наличие ошибки сегментации, проверьте $?
вход в ловушку. (Обратите внимание, что это $?
может быть 139, потому что программа вернулась нормально со статусом 139; этого можно избежать, если вы выполняете обработку в оболочке.)
set -e
trap 'case $? in
139) echo "segfault occurred";;
esac' EXIT
В bash или ksh или zsh вам не нужно использовать set -e
для выполнения прерывания после каждой команды, которая возвращает ненулевой статус, ERR
вместо этого можно включить прерывание . Как и прежде, вам нужно проверить $?
вход в ловушку, и 139 может (но редко делает) означать, что программа вернула этот статус.
trap "echo 'something happened!'" {1..64}
и до сих пор ничего не получаю. Я даже пробовал сset -bm
иset -o monitor
нада.