2

Название говорит само за себя - я нахожусь на Mac OS X, и я хочу определить, какая программа создает этот раздражающий файл awefawef2log в моем домашнем каталоге каждые несколько часов.

3 ответа3

1

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

bash-3.2# cat who.d 
#include <fcntl.h>

syscall::open:entry
/arg1 & O_CREAT/
{
    /* arg0 might not be paged-in yet */
    self->pathp = arg0;
}

syscall::open:return
/self->pathp && basename(copyinstr(self->pathp)) == $$1/
{
    printf("%s opened %s\n", execname, copyinstr(self->pathp));
    /* free the thread-local storage */
    self->pathp = NULL;
}
bash-3.2# dtrace -Cqs who.d testFile
touch opened testFile
^C

bash-3.2#

Несомненно, есть некоторые крайние случаи, которые это пропустит, например, файл, который был открыт и затем переименован.

Если важно найти только первый open() вы можете поэкспериментировать с провайдером fbt, чтобы найти вызов функции, который присутствует, только если целевой файл еще не существует. Обычно это будет распределение inode (но не vnode). Тем не менее, я думаю, что было бы тяжело написать что-то надежное и, конечно, оно не было бы стабильным в отношении изменений ОС.

1

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

sudo opensnoop -f /path/to/file
0

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

$ lsof | grep awefawef2log

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