В системе Linux я хотел бы получить список всех файлов, которые открываются (чтение или запись) определенным процессом в его жизни. Его жизнь может составлять несколько часов от начала до конца.

Я не хочу отлаживать ядро.

Я не против использовать программу моделирования, такую как http://valgrind.org/

Я попытался использовать lsof, однако я не уверен, что перечислены все файлы, которые когда-либо были открыты.

3 ответа3

2

1 совет ... прочитайте справочную страницу. специально посмотрите на параметр "-p" для lsof.

    -p s     This option excludes or selects the listing of  files  for  the
             processes

"s" - это идентификатор процесса, о котором вы говорите. Вы можете поймать это из простого

ps ax |grep yourprocessname

и поймать этот первый номер. тогда просто сделай

lsof -p your-snagged-number

и вуаля. Все файлы используются процессом.

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

1

Вы можете использовать strace:

strace -e open command

Пример:

$ strace -e open who
open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/lib/libc.so.6", O_RDONLY)        = 3
open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
open("/var/run/utmp", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/gconv/gconv-modules.cache", O_RDONLY) = 3
open("/etc/localtime", O_RDONLY)        = 3
cyrus    console      2011-12-08 15:34 (:0)
cyrus    :0           2011-12-08 15:34
0

Вы можете использовать strace для задачи, если она установлена в вашей системе:

strace -o strace.log <Your command>

В полученном файле журнала вы можете grep для «open (»), чтобы найти любые файлы, которые были открыты. Вы также можете использовать другие вещи, которые могут вас заинтересовать, такие как чтение / запись файлов, доступ к сети и другие действия.

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