2

Я хочу собрать список всех файлов, которые открываются приложением (в моем случае это как /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 ответ1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .