Как узнать, какой файл в настоящее время записывается процессом

Моя ситуация заключается в том, что время от времени определенный процесс (в данном случае это Thunderbird) не реагирует на ввод пользователя в течение минуты или около того. Я узнал, используя iotop что за это время он записывает довольно много на диск, и теперь я хочу узнать, к какому файлу он пишет, но, к сожалению, iotop дает только статистику для каждого процесса, а не для открытого файла (-descriptor).

Я знаю, что я могу использовать lsof чтобы узнать, какие файлы этот процесс открыт в данный момент, но, конечно, Thunderbird их много раскрывает, поэтому это не так полезно. iostat показывает только статистику на устройство.

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

2 Solutions collect form web for “Как узнать, какой файл в настоящее время записывается процессом”

Если вы прикрепляете strace к процессу только тогда, когда он подвешен (вы можете получить pid и поставить команду в очередь заранее, в запасном терминале), он покажет дескриптор файла блокирующей записи.

Тривиальный пример:

 $ mkfifo tmp $ cat /dev/urandom > tmp & [1] 636226 # this will block on open until someone opens for reading $ exec 4<tmp # now it should be blocked trying to write $ strace -p 636226 Process 636226 attached - interrupt to quit write(1, "L!\f\335\330\27\374\360\212\244c\326\0\356j\374`\310C\30Z\362W\307\365Rv\244?o\225N"..., 4096 <unfinished ...> ^C Process 636226 detached 

У меня есть root-доступ, я считаю, что лучшим инструментом будет подсистема аудита . Об этом мало литературы (но больше, чем о loggedfs); вы можете начать с этого руководства или нескольких примеров или просто с помощью страницы auditctl man . Здесь должно быть достаточно, чтобы убедиться, что демон запущен, а затем запустите auditctl как root:

 auditctl -a exit,always -F pid=1234 -F dir=/home/philipp 

Это будет записываться в журналы /var/log/audit/audit.log каждый раз, когда процесс с pid 1234 записывается где-то под /home/philipp . Накладные расходы довольно малы, намного меньше, чем strace .

  • Доступный временный файл с одним процессом
  • объединение вывода из разных сценариев в разные файлы в цикле
  • Sed для копирования части имени файла в другое содержимое файла с той же подстрокой
  • отображение разбитого файла на / dev / loop0
  • Инструменты для визуализации распределений размеров файлов
  • Файлы, связанные с Thunderbird - механизм безопасности для локального хранилища
  • Есть ли какой-то хост. Дополнительный файл для Linux
  • Как получить доступ к временному файлу сразу после создания?
  • Перенаправить stdout и stderr и переопределить опцию noclobber
  • Лучший способ только перечислить файлы, которыми я владею
  • Создание произвольно большого «поддельного» файла
  • Как известны типы файлов, если не из суффикса файла?
  • Linux и Unix - лучшая ОС в мире.