代码之家  ›  专栏  ›  技术社区  ›  Emil

在POSIX环境中,如何跟踪子进程访问的文件?

  •  1
  • Emil  · 技术社区  · 15 年前

    我有自己的POSIX应用程序,它启动一个子进程。我希望向父进程通知子进程读取或写入的所有文件的名称,以及子进程生成的任何子进程的文件名,以及它加载的任何动态库。类似地,我需要监视子进程生成的所有子进程,等等。

    这是怎么做到的?

    1 回复  |  直到 15 年前
        1
  •  1
  •   asveikau    15 年前

    我有两个想法。

    -“真正的方式”。

    我想你想要 ptrace

    本质上,此调用用于编写调试器。注意 PTRACE_SYSCALL ptrace 调用以查看进程的内存,以观察它是否是调用 open() .

    -懒散、刻板的方式。

    你可以使用 LD_PRELOAD 开() , dlopen() 预载 此共享库中的环境变量,因此动态链接器将在进程启动时加载它。

    这种方法的一个缺点是,如果一个进程知道它正在以这种方式被观察,它可以重置环境变量并再次执行自身,从而逃避检测。我能想到的另一个问题是,作为一个安全特性,如果您是root用户,那么这个环境变量是不受尊重的。