Ubuntu 14.04 есть способ напрямую отслеживать приложение в режиме реального времени? [dубликат]

У меня есть программа, которую я пытаюсь запустить, однако, когда я запускаю ее; он просто жалуется, что не может найти конкретный файл.

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

Есть ли способ показать в реальном времени, к каким файлам обращаются или какие файлы пытаются и не удается получить доступ?

Я использую Ext4, если это помогает.

Спасибо

6
задан 23 September 2012 в 09:24

4 ответа

(я сначала отправил свой ответ на этот вопрос askubuntu, но удалил его оттуда и разместил его здесь, поскольку это более актуально.)

Существует несколько способов выяснить, какие процессы файлов и библиотек открылись; основными инструментами являются lsof, strace и ltrace. Иногда необходимо запускать их с помощью sudo, поэтому программа имеет доступ ко всему, что ему нужно, чтобы получить точный снимок того, что вызывает программа.

1) С помощью lsof вам нужно найти идентификатор процесса, который вы хотите запросить, поэтому используйте, например:

lsof -c firefox

, в котором будут перечислены все файлы firefox, которые открыты и все его вызовы для системных разделяемых библиотек. (Firefox в настоящее время имеет pid 3310 в моей системе, поэтому вы также можете использовать lsof -p 3310, но вам сначала пришлось бы искать идентификатор процесса с помощью ps aux | grep [f]irefox). Более подробная информация о lsof подробно описана в этом полезном вопросе askubuntu .

2) ltrace и strace имеют очень похожие функции и варианты и очень полезны для поиска подробная информация о том, что вызывает процесс. Основное отличие состоит в том, что ltrace обычно отслеживает только вызовы library (хотя он может отслеживать системные вызовы с опцией -S), а strace отслеживает как library, так и другие вызовы system. Более подробная информация о процессах отслеживания доступна в этой статье IBM. Lsof, вероятно, более полезен для вас, если вы хотите изучить уже запущенный процесс, но strace также может это сделать и контролировать вызовы в режиме реального времени, когда задан процесс pid (sudo всегда используется, когда вы присоединяетесь к процессу) :

sudo strace -p 3310

, но гораздо полезнее запустить программу с помощью strace и посмотреть, что было вызвано, как в следующем примере:

strace -f -e trace=open /usr/bin/firefox

Вы можете просто запустите strace с целевым процессом и без параметров, но здесь здесь означают, что дочерние процессы отслеживаются (-f) и отслеживаются все открытые системные вызовы (-e trace=open). Если вы хотите сохранить вывод в файл, вы может указать -o ~/firefox.trace перед тем, как указывать /usr/bin/firefox.

Если вам нужен сводный список вызовов библиотеки, например, вы можете использовать

ltrace -c /usr/bin/leafpad

, а затем выйти из программы и список будет подготовлен. Опустите параметр -c для просмотра вызовов в режиме реального времени.

Результаты из strace и ltrace могут оказаться для вас не очень полезными, поскольку их трудно расшифровать, если вы не знаете, что ищете, но lsof должны предоставить некоторую базовую полезную информацию ,

11
ответ дан 17 July 2018 в 21:40

(я сначала отправил свой ответ на этот вопрос askubuntu, но удалил его оттуда и разместил его здесь, поскольку это более актуально.)

Существует несколько способов выяснить, какие процессы файлов и библиотек открылись; основными инструментами являются lsof, strace и ltrace. Иногда необходимо запускать их с помощью sudo, поэтому программа имеет доступ ко всему, что ему нужно, чтобы получить точный снимок того, что вызывает программа.

1) С помощью lsof вам нужно найти идентификатор процесса, который вы хотите запросить, поэтому используйте, например:

lsof -c firefox

, в котором будут перечислены все файлы firefox, которые открыты и все его вызовы для системных разделяемых библиотек. (Firefox в настоящее время имеет pid 3310 в моей системе, поэтому вы также можете использовать lsof -p 3310, но вам сначала пришлось бы искать идентификатор процесса с помощью ps aux | grep [f]irefox). Более подробная информация о lsof подробно описана в этом полезном вопросе askubuntu .

2) ltrace и strace имеют очень похожие функции и варианты и очень полезны для поиска подробная информация о том, что вызывает процесс. Основное отличие состоит в том, что ltrace обычно отслеживает только вызовы library (хотя он может отслеживать системные вызовы с опцией -S), а strace отслеживает как library, так и другие вызовы system. Более подробная информация о процессах отслеживания доступна в этой статье IBM. Lsof, вероятно, более полезен для вас, если вы хотите изучить уже запущенный процесс, но strace также может это сделать и контролировать вызовы в режиме реального времени, когда задан процесс pid (sudo всегда используется, когда вы присоединяетесь к процессу) :

sudo strace -p 3310

, но гораздо полезнее запустить программу с помощью strace и посмотреть, что было вызвано, как в следующем примере:

strace -f -e trace=open /usr/bin/firefox

Вы можете просто запустите strace с целевым процессом и без параметров, но здесь здесь означают, что дочерние процессы отслеживаются (-f) и отслеживаются все открытые системные вызовы (-e trace=open). Если вы хотите сохранить вывод в файл, вы может указать -o ~/firefox.trace перед тем, как указывать /usr/bin/firefox.

Если вам нужен сводный список вызовов библиотеки, например, вы можете использовать

ltrace -c /usr/bin/leafpad

, а затем выйти из программы и список будет подготовлен. Опустите параметр -c для просмотра вызовов в режиме реального времени.

Результаты из strace и ltrace могут оказаться для вас не очень полезными, поскольку их трудно расшифровать, если вы не знаете, что ищете, но lsof должны предоставить некоторую базовую полезную информацию ,

11
ответ дан 23 July 2018 в 22:17

Самый простой способ сделать это - запустить программу через strace и посмотреть вызовы stat64 (), которые получают информацию о файлах, или открыть () вызовы, открывающие файлы.

Итак, вы do:

strace -e stat64 -e open [program name]

И в результирующем выходе найдите:

(Нет такого файла или каталога)

Путь, который он пытался открыть, должен быть слева от этой ошибки.

3
ответ дан 17 July 2018 в 21:40

Самый простой способ сделать это - запустить программу через strace и посмотреть вызовы stat64 (), которые получают информацию о файлах, или открыть () вызовы, открывающие файлы.

Итак, вы do:

strace -e stat64 -e open [program name]

И в результирующем выходе найдите:

(Нет такого файла или каталога)

Путь, который он пытался открыть, должен быть слева от этой ошибки.

3
ответ дан 23 July 2018 в 22:17

Другие вопросы по тегам:

Похожие вопросы: