Каирская графика внутри my_conky.lua пожирает память, когда я использую surface_create_from_png

В отличие от перенаправлений для других команд, перенаправления во встроенной exec могут быть закрыты, когда оболочка выполняет внешнюю программу. POSIX допускает оба поведения . Ksh (как ATT ksh, так и pdksh и mksh) закрывают эти дескрипторы, когда они выполняют внешнюю утилиту (то есть для перенаправления на встроенную exec , после вызова dup2 для выполнения перенаправления, они устанавливают флаг FD_CLOEXEC на новом дескрипторе). Оболочка Bourne, dash, bash, zsh и BusyBox sh обрабатывают это перенаправление как любое другое перенаправление.

Более переносимым решением проблемы двух каналов ввода (при условии существования / dev / fd ) является выполнение другого перенаправления команды, которая считывает ввод, перемещая дескриптор файла в новый. Это дополнительное перенаправление не устанавливает флаг закрытия при выполнении для нового дескриптора.

sort a | { exec 3<&0; sort b | comm -12 /dev/fd/0 /dev/fd/4 4<&3; }

Это работает в pdksh / mksh и в ksh93r, но не в последних версиях ksh (93s + 2008-01-31 или 93u + 2012-08-01). Я не понимаю, что там делает ksh.

0
09.06.2019, 14:33
1 ответ

Я предполагаю, что память не освобождается до тех пор, пока conky не закроется или пока конфигурация не будет перезагружена.

Вместо того, чтобы создавать поверхность при каждом вызове drawimage, вы могли бы создать функцию x, создающую поверхность, и функцию y, разрушающую поверхность, вызывать x из lua_startup_hookи вызывать y из lua_shutdown_hook. Таким образом, поверхность будет создаваться только один раз при запуске Conky или перезагрузке конфигурации и уничтожаться один раз при завершении работы Conky или перезагрузке конфигурации.

Подробнее о lua_startup_hookи lua_shutdown_hookсм. man conky.

0
28.01.2020, 03:56

Теги

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