Программы, обычно буферные их вывод для эффективности. Таким образом, они накапливают вывод в области памяти (названный буфером), и они на самом деле выводят вывод только, когда буфер полон или в определенных ключевых пунктах в программе. Когда программа обычно заканчивается, она сбрасывает буфер вывода (т.е. распечатывает любые данные, которые это оставляют в ней). Когда это segfaults, содержание буфера потеряно.
Вы не наблюдаете этот эффект при запущении программы непосредственно в терминале, потому что поведение отличается, когда вывод программы подключен к терминалу (в противоположность регулярному файлу или каналу). В терминале поведение по умолчанию состоит в том, чтобы сбросить буфер в конце каждой строки. Поэтому Вы будете видеть каждую полную строку, это производится до точки когда программа segfaults.
Можно вынудить программу работать в терминале и собрать свой вывод. Самый простой путь состоит в том, чтобы работать script
. Существует много раздражений, что необходимо будет работать вокруг:
script
добавляет строка заголовка к файлу расшифровки стенограммы, который необходимо будет удалить впоследствии.script
не возвращает код состояния команды, таким образом, необходимо будет сохранить его где-нибудь, если Вы захотите знать о segfault или какой-либо другой ошибке.script
вызовет нормальный вывод и ошибку; необходимо сохранить вывод ошибок в отдельный файл.export FONT="foo"
script -q -c '
ttf2afm "$FONT.ttf" 2>"$FONT.ttf2afm-err";
echo $? >"$FONT.ttf2afm-status"
' "$FONT.ttf2afm-typescript"
tail -n +2 <"$FONT.ttf2afm-typescript" >"foo.afm"
rm "$FONT.ttf2afm-typescript"
if [ "$(cat "$FONT.ttf2afm-status")" -ne 0 ]; then
echo 1>&2 "Warning: ttf2afm failed"
cat "$FONT.ttf2afm-err"
fi
Если Вы используете 'удар' в качестве своей оболочки, это - утилита GNU. 'coreutils' пакет в Вашей системе содержит программное обеспечение GNU, вещи как mv
, ls
, rm
, и т.д.
Ядро не что-то, с чем Вы взаимодействуете непосредственно, но через другое программное обеспечение в Вашей системе. Для генерала в определении ядро, обеспечивает средство для программного обеспечения для взаимодействия с аппаратными средствами в системе, путем чтения в нажатиях клавиш и движении мыши, чтения и записи данных в диски, и планирования и выполнения вычисления из программного обеспечения, работающего компьютере. Существует много деталей, которые я игнорирую/заминаю, Вы могли бы извлечь выгоду из того, чтобы читать страницу Kernel Wikipedia.
Ваш менеджер окон наиболее вероятен не программное обеспечение GNU, но из других проектов программного обеспечения (Gnome, KDE, XFCE, и т.д.). Однако они все полагаются на программное обеспечение GNU для выполнения, с помощью GNU C Библиотека (glibc) и набор Компилятора GNU (gcc), например. Кроме того, большая часть программного обеспечения в Вашей системе лицензируется с Генеральной общедоступной лицензией GNU или GPL, таким образом, Вы извлекаете выгоду из лицензии GNU.
Ядро управляет ресурсами. Ресурсы включают процессорное время, память и периферийные устройства. Это делает это путем прямого общения с ресурсами и воздействия интерфейса пространства пользователя.
Инструменты Пространства пользователя включают основные утилиты как ls, кошка, dd, ln, монтируются и т.д. Они позволяют пользователю работать с ресурсами, которые обеспечивает ядро. Linux (в противоположность BSD, OSX и другим Нельдам) является основным пользователем инструментов GNU, но даже все системы Linux не используют их; альтернативный набор инструментов для Linux обеспечивается Busybox.
Оболочка обеспечивает среду, которая позволяет пользователю использовать Инструменты Пространства пользователя. Оболочки в качестве примера включают удар, ksn, zsh, и рыбу. Они обычно обеспечивают подсказку, при которой пользователь может ввести команды, которые запускают инструменты пространства пользователя.
Это - намного более высокий слой, там обычно существует сервер дисплея, который ответственен за управление графическим, аудио, и ресурсы ввода-вывода и обеспечение интерфейса к высокоуровневым инструментам. Обычно, менеджер по оформлению является слоем выше сервера дисплея и может обеспечить вещи как пользовательское управление входом в систему и управление сеансами. Выше этого обычно менеджер окон. Менеджер окон обеспечивает регионы, в которых приложения могут представить свое содержание, он также позволяет пользователю взаимодействовать с этими регионами путем перемещения, изменяя размер и переупорядочивая их.