检测哪个程序正在创建文件

检测哪个程序正在创建文件

标题说明了一切 - 我在使用 Mac OS X,我想awefawef2log每隔几个小时检测一下哪个程序在我的主目录中创建这个烦人的文件。

答案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)分配。但是,我认为编写一些健壮的东西会很困难,当然,它不会随着操作系统的变化而稳定。

答案2

您也可以使用 opensnoop:

sudo opensnoop -f /path/to/file

答案3

首先,你可以检查文件是否被某个应用程序打开

$ lsof | grep awefawef2log

相关内容