trap "$instructions" SIGSEGV
Fängt Segmentierungsfehler in der Shell selbst ab.
Wenn Sie Ihr Skript unter ausführen set -e
, können Sie eine Falle auf EXIT
(oder 0
) setzen. Es wird ausgeführt, wenn Ihr Skript beendet wird (sei es aufgrund eines Befehls, der einen Status ungleich Null zurückgibt, oder indem Sie explizit aufrufen exit
oder das Ende des Skripts fallen lassen). Um auf einen Segmentierungsfehler zu testen, überprüfen Sie den $?
Eintritt in die Falle. (Beachten Sie, dass $?
dies 139 sein kann, da das Programm normal mit dem Status 139 zurückgegeben wird. Dies ist vermeidbar, wenn Sie Ihre Verarbeitung in der Shell durchführen.)
set -e
trap 'case $? in
139) echo "segfault occurred";;
esac' EXIT
In bash oder ksh oder zsh müssen Sie nicht set -e
nach jedem Befehl, der einen Status ungleich Null zurückgibt, einen Trap ausführen ERR
. Stattdessen können Sie einen Trap aktivieren. Nach wie vor müssen Sie den $?
Zugang zum Trap überprüfen , und 139 kann (aber selten) bedeuten, dass das Programm diesen Status zurückgegeben hat.
Gilles 'SO - hör auf böse zu sein'
quelle
trap "echo 'something happened!'" {1..64}
und bekomme trotzdem nichts. Ich habe es sogar mitset -bm
undset -o monitor
aber nada versucht .trap "echo 'something happened'" {1..31}
funktioniert für mich (ohne die!
und die Signalspezifikationen, die dazu führenbash: trap: XX: invalid signal specification
).