Процесс создает огромное количество файлов журнала, а также удаляет его.
Многие из этих удаленных файлов имеют неработающие ссылки в каталоге / proc / pid / fd
.
Нужно ли закрывать эти дескрипторы файлов процессом? Чтобы я не видел битые ссылки. Я подсчитываю количество файловых дескрипторов с помощью следующей команды:
ls /proc/<pid>/fd | wc -l
Если в процессе открыт файл и этот файл удаляется, файл появляется в виде неработающей ссылки в /proc/PID/fd
. Это совершенно нормально. Неработающая ссылка сама по себе не является признаком того, что что-то не так.
Если программа держит открытыми много файлов, но ничего с ними не делает, это может указывать на ошибку в программе. Держать удаленный файл открытым имеет определенное применение, но для файла журнала это не имеет никакого смысла, поэтому, если это действительно файлы журнала, вероятно, в программе есть ошибка. Вам придется обратиться к автору программы, чтобы его исправили (или сделать это самостоятельно, если у вас есть исходный текст).
Нет способа действовать на процесс через /proc
. Вы можете подключить к процессу отладчик и заставить его закрыть файлы, но результат не гарантирован. Это все равно что убрать лестницу под человеком, который лезет на крышу: он может упасть и сильно пораниться. Если вы хотите вернуть место на диске, вы можете усечь файлы через /proc
: команда shell : >/proc/PID/fd/NUMBER
сделает это. Если программа продолжает писать в файл, это снова начнет использовать дисковое пространство; способ избежать этого - использовать отладчик, чтобы заставить процесс dup2
открыть дескриптор файла на /dev/null
, но мы вернулись к результатам, которые не гарантированы.