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

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

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

  • Как настроить устройство обратной связи видео4linux
  • Есть ли способ узнать, какая программа является segfault-ing?
  • Проверка ядра linux для исправления RT-Preempt
  • Каковы гарантии одновременной записи в именованный канал?
  • Linux - предотвращение сбоя приложения из-за нехватки дискового пространства
  • создавать пустые файлы с той же структурой каталогов, что и справочный каталог
  • Проблема возникает только случайным образом, и для ее появления может потребоваться довольно много времени, поэтому я надеюсь, что мне не придется трассировать Thunderbird и пробираться по длинным журналам, чтобы узнать, какой файл больше всего пишет.

  • Две команды для одновременного запуска в двух терминалах
  • Как удаленный рабочий стол Linux со звуковой поддержкой
  • Создание одноразовой группы
  • Каковы некоторые распространенные случаи использования файлов файлов блоков / символов из оболочки с помощью mknod?
  • -p вариант ps
  • Как Моно волшебный?
  • 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 .

    Linux и Unix - лучшая ОС в мире.