Использование памяти Linux?

К сожалению, это, кажется, не возможно с текущими версиями Дурака.

$index_format поддерживает определенный набор спецификаторов формата, тянущих из различных метаданных сообщения. Это описано в руководстве Дурака (или вот документация "стабильной" версии для того же), и как Вы видите от таблицы, существует только несколько спецификаторов формата, которые являются условным выражением. Это %M, %y и %Y; %M является количеством скрытых сообщений, если поток сворачивается, и %y и %Y являются заголовками X-маркировки если существующий.

Фактическое форматирование даты и времени сообщения сделано strftime(3), который не поддерживает условное форматирование вообще.

Могло бы быть возможно сделать ужасное обходное решение путем непрерывной перезаписи файлов сообщений Date: заголовки, но я не хотел бы делать это, по крайней мере. Однако это - наименее плохая возможность, что я могу думать.

Единственное действительное решение, о котором я могу думать, состояло бы в том, чтобы или реализовать такую поддержку в Дураке (который почти наверняка является, как Thunderbird делает это), или запишите замену strftime который поддерживает условное форматирование, и введите то использование LD_PRELOAD или подобный механизм. Последний, однако, будет влиять на весь дисплей даты и времени в Дураке, который проходит strftime, не только касающийся индекса сообщения.

2
07.07.2014, 08:47
2 ответа

Linux использует оперативную память иначе, чем другие операционные системы.

Вместо того, чтобы сидеть там с неиспользованной оперативной памятью, Linux хранит данные, которые, как считает , могут быть использованы в оперативной памяти - здесь могут быть кэшированы любые приложения, файлы и т.д.

В результате, использование оперативной памяти Linux выше, чем то, что используется запущенными приложениями. Это дополнительное использование буферизируется, чтобы на него можно было подавать иски. Запустите free -h и вторая строка под used покажет вам, что большая часть "используемой" памяти на самом деле просто кэшируется.

В случае, когда вся ваша память кэшируется и программе нужна память, она удалит из кэша достаточно, чтобы соответствовать этой программе.

.
5
27.01.2020, 21:57

Это связано с тем, что некоторые дескрипторы файлов все еще открыты, хотя приложение останавливается. Вы можете перечислить открытые дескрипторы файлов, используя технику, упомянутую здесь.

Если вам нужно закрыть дескрипторы файлов без перезагрузки, вы можете воспользоваться подходом, упомянутым Грэмом здесь, однако, вы должны знать о дескрипторах файлов, которые вы закрываете, как выделено Грэмом в его ответе. Его ответ,

Чтобы ответить буквально, закрыть все открытые файловые дескрипторы для bash:

для fd в $(ls /proc/$$/fd); do
 eval "exec $fd>&-"
готовый

Однако это действительно не очень хорошая идея, так как это закроет основное дескрипторы файлов, необходимые оболочке для ввода и вывода. Если вы это сделаете, ни одна из запущенных программ не будет отображать их вывод на экране (если только они не пишут непосредственно на устройство tty). Если факт в закрытие моих тестов stdin (exec 0>&-) просто приводит к интерактивному оболочки для выхода.

На самом деле, вы, возможно, хотите закрыть все файлы. дескрипторы, которые не являются частью основной операции оболочки. Эти равны 0 для stdin, 1 для stdout и 2 для stderr. Вдобавок ко всему, некоторые Похоже, что в оболочках по умолчанию открыты и другие дескрипторы файлов. На сайте bash у вас есть 255 (также для терминальных входов/выходов) и dash у меня есть 10, которые указывает на /dev/tty, а не на конкретное устройство tty/pts. терминал используется. Чтобы закрыть все, кроме 0, 1, 2 и 255 дюймов. bash:

 для fd в $(ls /proc/$$/fd); do
 дело "$fd" в
 0|1|2|255)
 ;;
 *)
 eval "exec $fd>&-"
 ;;
 esac
готовый

Обратите также внимание, что eval требуется при перенаправлении дескриптора файла. содержащийся в переменной, если не bash расширит переменную, то считать его частью команды (в этом случае он попытается выполнить . команда 0 или 1 или любой другой дескриптор файла, который вы пытаетесь использовать. близко). Также использование глобуса вместо ls (например, /proc/$$/fd/* ) кажется. чтобы открыть дополнительный дескриптор файла для глобуса, так что ls кажется лучшим. решение здесь.

Обновление

Для получения дополнительной информации о переносимости /proc/$$/fd, пожалуйста. см. Перенос ссылок на дескрипторы файлов. Если /proc/$$/fd недоступен, то произойдет замена на $(ls /proc/$$/fd), используя lsof (если таковой имеется), были бы $(lsof -p $$ -Ff | grep f[0-9] | cut -c 2-).

0
27.01.2020, 21:57

Теги

Похожие вопросы