我想监控正在运行的进程的磁盘空间要求。理想情况下,我希望能够指向一个进程,并找出可归因于它的已用磁盘空间的净更改。在Linux中有一种简单的方法吗? (我很确定使用DTrace在Solaris中执行此操作是可行的,但可能不是很容易)
答案 0 :(得分:2)
可能你必须对它进行ptrace(或者让你为你做这个并解析输出),然后尝试找出正在使用的光盘。
这非常重要,因为您的跟踪过程需要了解哪些文件操作使用磁盘空间 - 并且没有竞争条件。但是,您可以进行近似。
相当多的东西都会占用磁盘空间,因为大多数Linux文件系统都支持“漏洞”。我想你也可以计算漏洞用于会计目的。
另一个问题是知道什么文件系统操作释放了磁盘空间 - 例如,打开文件进行写入可能会在某些情况下截断它。这显然释放了空间。同样,如果文件重命名为现有文件,则重命名文件可以释放空间。
另一个问题是调用辅助进程来执行操作的进程 - 例如,如果myprog执行系统(“rm -rf somedir”)。
同样很难知道文件何时被完全删除,因为它可能会从文件系统中删除但仍由另一个进程打开。
快乐的黑客攻击:)
答案 1 :(得分:0)
如果您知道要监控的流程的PID,您会在/proc/<PID>
中找到有关它的大量信息。
文件/proc/<PID>/io
包含有关进程读取和写入的字节的统计信息,它应该是您正在寻找的内容。
此外,在/proc/<PID>/fd/
中,您可以找到您的流程打开的所有文件的链接,因此您可以监控它们。
答案 2 :(得分:0)