Я запустил исполняемый файл в bash
./code > log
Он показывает случайные сообщения об ошибках на терминале, тогда как все операторы printf попадают в файл журнала. Я перезапускаю это как ниже
./code >& log
Теперь случайные сообщения об ошибках также попадают в журнал. Но если есть ошибка сегментации, она все равно отображается на терминале. Почему? Как сделать так, чтобы сообщение Segmentation fault (core dumped)
попадало в файл журнала?
пользователь $ bash --version
GNU bash, версия 4.2.24 (1) -релиз (i686-pc-linux-gnu)
источник
help trap
trap
перехватывает сигналы, отправленные в оболочку . Так что поймать того, кого отправляют в вашу программу, не получится.Сообщение «ошибка сегментации» выводится в stderr, но это стандартная ошибка оболочки, а не стандартная ошибка программы. Оболочка печатает это сообщение, когда обнаруживает, что программа завершилась из-за сигнала.
Вы можете заставить сообщение замолчать, перенаправив stderr вокруг части скрипта оболочки, которая запускает программу:
источник