
Как узнать, какой процесс пишет в файл
Допустим есть файл debug.log который постоянно растет. Наша задача понять, какой процесс это делает и грохнуть его.
В таких случаях помогает команда lsof
lsof (List Open Files) показывает, какие файлы сейчас открыты процессами в системе:
- какой процесс держит файл открытым
- его PID
- от какого пользователя он запущен
- открыт ли файл на запись
Выполняем
sudo lsof debug.log
Пример вывода
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php-fpm 1234 www-data 3w REG 8,1 12345 111 debug.log
- COMMAND — имя процесса
- PID — идентификатор процесса
- FD — дескриптор файла
Если в колонке FD есть w, значит файл открыт на запись.
lsof показывает не того, кто писал когда-то, а того, кто держит файл открытым прямо сейчас. Обычно это и есть источник постоянной записи.
Как остановить процесс
Аккуратное завершение
sudo kill 1234
Принудительное завершение
sudo kill -9 1234