Как собрать все файлы, которые открываются приложением linux

Я хочу собрать список всех файлов, которые открываются приложением (в моем случае это как / w bulder).

'strace -f' терпит неудачу, потому что он смешивает непрерывные открытия из разных вилок, например:

13078 open("file1", O_RDONLY <unfinished ...>
13077 open("file2", O_RDONLY|O_LARGEFILE) = 3
13078 <... open resumed> )              = 3

и я не могу отследить, действительно ли файл "file1" открыт или завершился неудачно с E_NOENT.

'strace -ff' также завершается ошибкой, поскольку создает слишком много файлов (приложение создает действительно большое количество подпроцессов) и создает программу.${pid}, программу.${pid+1} и т. д. после приблизительно 32 000 разветвлений он снова создает и переписывает программу.${pid}, программа.${pid+1}. Я могу гуглить, как увеличить нумерацию процессов, но в любом случае мне не нужна эта масса файлов.

Итак, вопрос в том, могу ли я решить эту проблему быстро и грязно с помощью strace или другого инструмента?

1 ответ

strace -f -eopen /path/to/cmd args ... 2>&1 | gzip > output.log.gz


Если вы ищете конкретный процесс, а не всех детей, то:

gunzip output.log.gz | head -n500 | less

Читайте файл, пока не найдете идентификатор процесса (pid) конкретной программы, которую вы ищете, а затем используйте grep,


Если вы ищете конкретные результаты (например, отсутствие ENOENT), вы можете получить их:

zgrep --invert-match ENOENT output.log.gz | less

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