В Linux процесс продолжает работать, даже если его исполняемый файл уже удалён с диска. Пока процесс не завершится, ядро держит файл открытым через файловый дескриптор.
Такие процессы стоит периодически искать - особенно после обновлений ПО, удаления пакетов или при аудите безопасности.
▪️Быстрая проверка
Исполняемый файл каждого процесса доступен через
/proc/<PID>/exe:ls -l /proc/*/exe 2>/dev/null | grep '(deleted)'
Например:
/proc/2841/exe -> /usr/bin/python3.12 (deleted)
Это означает, что процесс продолжает использовать уже удалённый бинарник.
▪️Более удобный вариант
С помощью
lsof:lsof | grep '(deleted)'
Команда покажет не только исполняемые файлы, но и удалённые библиотеки, логи и другие объекты, которые всё ещё удерживаются процессами.
▪️Почему это происходит
Типичный сценарий:
apt upgrade
Во время обновления старый бинарник удаляется и заменяется новым. Но уже запущенный процесс продолжает выполнять старую версию из памяти.
Пока сервис не будет перезапущен, он работает с удалённым файлом.
▪️Когда это становится проблемой
Если удерживается исполняемый файл или библиотека - система использует устаревший код.
Если удерживается большой удалённый лог:
/var/log/app.log (deleted)
место на диске не освободится, пока процесс не закроет файл или не завершится.
▪️Какие процессы требуют внимания
Не все записи
(deleted) опасны. В первую очередь стоит проверить:системные сервисы после обновлений;
процессы с удалёнными библиотеками (
.so);файлы в
/tmp или /dev/shm, которые продолжают использоваться после удаления.▪️Почему это важно
Поиск процессов с
(deleted) помогает обнаружить сервисы, которые давно требуют перезапуска, понять, почему не освобождается место на диске, и выявить подозрительные процессы, работающие с уже отсутствующими файлами.BashTex 📱 #bash #linux