Uruchomiłem plik wykonywalny bash
./code > log
Pokazuje sporadyczne komunikaty o błędach na terminalu, podczas gdy wszystkie instrukcje printf przechodzą do pliku dziennika. Ponownie uruchamiam go jak poniżej
./code >& log
Teraz sporadyczne komunikaty o błędach przechodzą również do dziennika. Ale jeśli wystąpi błąd segmentacji, nadal jest wyświetlany na terminalu. Dlaczego? Jak sprawić, aby wiadomość Segmentation fault (core dumped)
trafiła do pliku dziennika?
user $ bash --version
GNU bash, wersja 4.2.24 (1) -release (i686-pc-linux-gnu)
źródło
help trap
trap
przechwytuje sygnały wysyłane do powłoki . Więc nie zadziała złapanie tego wysyłanego do twojego programu.Komunikat „błąd segmentacji” jest drukowany na stderr, ale jest to standardowy błąd powłoki, a nie błąd standardowy programu. Powłoka drukuje ten komunikat, gdy wykryje, że program zakończył się z powodu sygnału.
Możesz wyciszyć wiadomość, przekierowując stderr wokół części skryptu powłoki, która uruchamia program:
źródło