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

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

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

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

  • (S / D) NAT через NF-крючки
  • Греп на одной линии
  • Является ли разработка / тестирование Linux-модуля безопасным с использованием виртуальной машины?
  • Неожиданный конец ошибки файла при выполнении скрипта
  • Почему не может / proc быть слоем файловой системы наложения (overlayfs) на linux?
  • Настройка трафика для туннеля GRE
  • Двойная загрузка Windows и Linux с использованием VHD (Virtual Hard Disk)
  • С чем связаны термины CC, LD и SHIPPED во время процесса компиляции ядра ядра?
  • 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 .

    Interesting Posts

    Каков алгоритм планирования собственной библиотеки потоков POSIX?

    Отсутствует функция float в awk на RHEL 5.8

    Поиск файлов, более новых, чем другой файл в каждом подкаталоге

    Почему я все еще получаю приглашение пароля с помощью ssh с аутентификацией с открытым ключом?

    Как избежать проводов awk для awk?

    Cinnamon 2.2 Как добавить пользовательский shortuct: переместить рабочее пространство вверх

    Сценарий оболочки: если несколько условий

    Отправка сообщений электронной почты из сценария bash в Solaris VM

    Unix: Bash Ограничение выхода на X Количество строк

    ссылочная переменная оболочки $ COLUMNS из сценария bash

    Извлечь X количество минут из текущего времени из файла журнала

    Почему встроенные времена не работают в трубопроводе?

    Почему некоторые файлы Linux имеют суффикс 'd'?

    Как переустановить syslinux на переформатированный (fat32 to fat16) раздел

    Резервное копирование раздела

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