Ich habe eine ausführbare Datei ausgeführt bash
./code > log
Es werden gelegentlich Fehlermeldungen auf dem Terminal angezeigt, während alle printf-Anweisungen in die Protokolldatei geschrieben werden. Ich wiederhole es wie unten
./code >& log
Jetzt werden auch gelegentliche Fehlermeldungen protokolliert. Liegt jedoch ein Segmentierungsfehler vor, wird dieser weiterhin am Terminal angezeigt. Warum? Wie wird die Nachricht Segmentation fault (core dumped)
in die Protokolldatei geschrieben?
Benutzer $ bash --version
GNU Bash, Version 4.2.24 (1) -Release (i686-pc-linux-gnu)
quelle
help trap
trap
Befehl fängt an die Shell gesendete Signale ab . Es wird also nicht funktionieren, denjenigen zu fangen, der an Ihr Programm gesendet wird.Die Meldung "Segmentierungsfehler" wird an stderr ausgegeben, es handelt sich jedoch um den Standardfehler der Shell und nicht um den Standardfehler des Programms. Die Shell gibt diese Meldung aus, wenn sie feststellt, dass das Programm aufgrund eines Signals beendet wurde.
Sie können die Nachricht stumm schalten, indem Sie stderr um den Teil des Shell-Skripts leiten, der das Programm ausführt:
quelle