我正在编写一个小工具,我需要在其中查找每个用户的文件系统内存使用情况.
如果文件系统使用超过某个阈值,我必须做一些清理活动.我可以使用什么系统调用,以便能够找到每个用户的内存使用情况?
seh*_*ehe 16
一种简单的方法
du -shc /home/*
Run Code Online (Sandbox Code Playgroud)
要对它进行排序:
du -smc /home/* | sort -n
Run Code Online (Sandbox Code Playgroud)
还有一个众所周知的Perl脚本,可以选择为每个用户发送磁盘使用情况报告: durep
Bas*_*tch -1
也许您对磁盘配额感兴趣(某些但不是全部文件系统支持磁盘配额)。低级系统调用是quotactl(2)。也许使用现有的工具quota(1)和quotacheck,,,edquota等等 ...可能就足够了。warnquotaquotaon
如果您想知道给定进程使用的内存,请考虑getrusage(2)系统调用。您还可以读取pid 1234下/proc/self/或pid 1234的伪文件。您还可以扫描(使用常用的目录扫描例程:opendir (3) ,使用stat(2)在readdir(3)上循环,以...结束)以获取数值目录(因为描述了pid 1234的进程)。阅读有关proc(5)的更多信息(例如or等)。您可以通过读取和伪文件来查询进程 1234 的虚拟地址空间。例如,尝试在终端中查询当前 shell 进程的信息。/proc/1234/proc/closedir/proc/1234//proc/self/maps/proc/1234/smaps/proc/1234/status/proc/1234/status/proc/1234/mapscat /proc/$$/statuscat /proc/$$/maps
当然,还要考虑du(1)和df(1)命令(如果您想获得它们的输出,可以通过popen(3)仔细调用它们)。如果出于某种原因您想要递归扫描文件树(例如,像这样计算其累积使用的大小),请考虑使用nftw(3)函数。另请参见stat(2)和statfs(2)系统调用。du
请记住,当您的程序正在探索或查询文件系统时,其他进程可以(并且经常)写入文件系统。并且您的用户可以随时启动新进程(可能是间接的,例如使用crontab(5)、system(3)、fork(2)和execve(2)、at、batch、 ...)。ssh
还可以阅读一本好的 Linux 编程书籍,也许是旧的《高级 Linux 编程》和syscalls(2)
我正在编写一个小工具,需要在其中查找每个用户的文件系统内存使用情况。
如果您在 Linux 上使用 C 进行编码,请考虑巧妙地组合使用nftw(3)和stat(2)以及statfs(2)。
| 归档时间: |
|
| 查看次数: |
40425 次 |
| 最近记录: |